yeaha / lysine
RESTful Web 框架
2.0.6
2017-02-20 04:04 UTC
Requires
- php: >=5.5.0
Suggests
- monolog/monolog: Allows more advanced logging of the application flow
This package is not auto-updated.
Last update: 2024-09-14 17:53:40 UTC
README
Lysine 已停止更新,新框架在 https://github.com/yeaha/owl
Lysine
Lysine 是一个 PHP 框架,专为 RESTful Web 应用开发设计,自 2010 年开发以来,一直持续在单日百万动态请求规模下的正式生产环境中使用和改进。
绝大多数的 Web 开发均包括 4 大核心功能:
- MVC,URL 和程序逻辑之间的调用和映射
- 存储服务读写,数据库和缓存(缓存也是存储的一种)
- ORM,存储数据和业务逻辑之间的映射关系
- 会话管理,多次 HTTP 请求之间的上下文数据读写
无论现在还是未来,Lysine 都只会致力于实现和改进这 4 大核心功能,无意也无力成为一个大而全的框架。
本项目基于 MIT 许可证发布,您可以自由使用和修改。
功能特性
- 基于 PHP 5.4 新特性,namespace 及 trait
- RESTful 控制器,以资源的方式组织 Web 应用,通过 HTTP 标准方法 (GET/POST/PUT/DELETE) 访问资源 (@src/mvc.php)
- URL 路由,自动匹配或正则匹配 (@src/mvc.php)
- 纯 PHP 实现的网页视图,支持视图布局特性 (\Lysine\View 类 @src/mvc.php)
- 基于 PDO 的数据库封装,支持 postgresql、mysql、sqlite (@src/service/db.php)
- 数据库 select 查询封装 (\Lysine\Service\DB\Select 类 @src/service/db.php)
- 常用缓存服务封装,redis 和 memcached
- ORM 实现了精简的 DataMapper 模式,可以自行扩展对象存储方式,易于为水平切分或垂直切分扩展 (@src/datamapper.php)
- 程序日志记录,可输出至文件、FirePHP、FireLogger、ChromePHP
- 基于事件驱动的对象组织 (\Lysine\Event 和 \Lysine\Traits\Event @src/core.php)
- 存储服务管理,快捷定义和调用多种不同的外部服务 (\Lysine\Service\Manager @src/service/manager.php)
- HTTP 会话间上下文数据封装,支持存储到 session、cookie、redis (\Lysine\Context @src/context.php)
单元测试
> git clone https://github.com/yeaha/Lysine2 && cd Lysine2/tests
> phpunit .
DEMO
- Hello World: 经典示例 (@demos/hellow_world/)
- RBAC: 用户角色访问权限控制 (@demos/rbac/)
详见各 demo 目录下 README.md
代码构成
得益于精心设计和不断改进,整个框架一直保持在比较小的规模,只有 4000 余行,168k
以下是使用 PHPLoc 对框架代码的分析结果
phploc 2.0.2 by Sebastian Bergmann.
Directories 2
Files 21
Size
Lines of Code (LOC) 4628
Comment Lines of Code (CLOC) 203 (4.39%)
Non-Comment Lines of Code (NCLOC) 4425 (95.61%)
Logical Lines of Code (LLOC) 1572 (33.97%)
Classes 1407 (89.50%)
Average Class Length 23
Average Method Length 3
Functions 116 (7.38%)
Average Function Length 4
Not in classes or functions 49 (3.12%)
Complexity
Cyclomatic Complexity / LLOC 0.40
Cyclomatic Complexity / Number of Methods 2.42
Dependencies
Global Accesses 28
Global Constants 2 (7.14%)
Global Variables 3 (10.71%)
Super-Global Variables 23 (82.14%)
Attribute Accesses 432
Non-Static 411 (95.14%)
Static 21 (4.86%)
Method Calls 530
Non-Static 465 (87.74%)
Static 65 (12.26%)
Structure
Namespaces 12
Interfaces 2
Traits 3
Classes 60
Abstract Classes 5 (8.33%)
Concrete Classes 55 (91.67%)
Methods 395
Scope
Non-Static Methods 360 (91.14%)
Static Methods 35 (8.86%)
Visibility
Public Method 274 (69.37%)
Non-Public Methods 121 (30.63%)
Functions 26
Named Functions 21 (80.77%)
Anonymous Functions 5 (19.23%)
Constants 55
Global Constants 5 (9.09%)
Class Constants 50 (90.91%)