yeaha / lysine

RESTful Web 框架

2.0.6 2017-02-20 04:04 UTC

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 新特性,namespacetrait
  • 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)
  • 程序日志记录,可输出至文件、FirePHPFireLoggerChromePHP
  • 基于事件驱动的对象组织 (\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%)