guzaba / guzaba2
基于 swoole 的 PHP 框架
v0.0.5
2020-07-31 07:01 UTC
Requires
- azonmedia/apm: dev-master
- azonmedia/debug: dev-master
- azonmedia/di: dev-master
- azonmedia/exceptions: dev-master
- azonmedia/http: dev-master
- azonmedia/lock: dev-master
- azonmedia/patterns: dev-master
- azonmedia/psr-to-swoole: dev-master
- azonmedia/reflection: dev-master
- azonmedia/registry: dev-master
- azonmedia/routing: dev-master
- azonmedia/swoole-to-psr: dev-master
- azonmedia/transaction: dev-master
- azonmedia/url-rewriting: dev-master
- azonmedia/utilities: dev-master
- azonmedia/watchdog: dev-master
- jbzoo/utils: ^2.3
- psr/cache: ^1.0
- psr/http-message: ^1.0
- psr/http-server-middleware: ^1.0
- psr/log: ^1.1
- ramsey/uuid: ^3.8
- symfony/cache: ^5.0
Requires (Dev)
- azonmedia/php-codesniffer-azonmedia-coding-standard: dev-master
- codeception/codeception: 4.1.x-dev
- codeception/module-asserts: ^1.0.0
- codeception/module-phpbrowser: ^1.0.0
- codeception/module-rest: dev-master
- eaglewu/swoole-ide-helper: dev-master
- friendsofphp/php-cs-fixer: ^2.15
- phpstan/phpstan: ^0.11.15
- squizlabs/php_codesniffer: 3.*
- vimeo/psalm: ^3.0@dev
This package is auto-updated.
Last update: 2024-09-10 13:35:22 UTC
README
概述
Guzaba2 是一个研究框架。它探索了嵌套事务和自动(部分)回滚的使用,不同的设计模式和实现。它不适合用于生产(可能永远不会),尚未进行文档化。Guzaba2 的测试平台是 Guzaba Platform。该框架具有某些与(非常)其他框架相似的特性(它借鉴了 Slim 的代码),在其他方面则非常不同。如果您想讨论框架中的特定功能或设计决策,请开启 讨论。
Guzaba2(以及 Guzaba1)的创建是因为没有其他框架提供
- 嵌套事务 - 支持部分事务回滚,事务可以继续并提交
- 自动事务回滚 - 在放弃作用域时(无论是由于异常还是返回)(SBRM)
- 各种事务事件的回调 - 您可以添加条件块,如果当前(无论是主事务还是嵌套事务)提交或回滚
- 回滚原因 - 在您的回调块中,您可以检查事务为何回滚 - 明确或隐式地由于异常或返回
- 您还可以获取导致您的交易回滚的异常,无论异常是否被捕获
- ActiveRecord 对象的事务 - 如果事务回滚,对象将自动更新其属性(并且如果需要,您仍然可以保存它们!)
- 事务和事务管理器可用于实现自定义事务(如文件系统事务)
Guzaba2 在以下方面进行了改进并添加了支持
- Swoole 基于
- 数据库连接池
- 自动释放获取的资源/连接(SBRM)
- ORM 对象的共享内存 - ActiveRecord 对象只是指向所有协程之间共享数组数据的指针
- 比 Guzaba1 更好的 ACL 支持 - 对象和类/静态方法都适用
- 许多速度优化(由 Swoole 的持久内存模型实现) - 所有一切都作为本地对象保存在本地内存中!无需序列化和反序列化!
- 并行异步查询 & 操作(多亏了 Swoole 协程)
- 它可以在不到 1 毫秒的时间内返回响应!(《GuzabaPlatform》与请求缓存组件)。这不是基于时间/过期的缓存,而是基于实际业务逻辑的缓存(各种对象/记录的更新时间以及可以和不能缓存的)!
- 具有调试器(通过 telnet)
还有一些常见功能
- PSR-7, PSR-11, PSR-15, PSR-3(即将支持 PSR-14, PSR-16 和 PSR-17)
- ActiveRecord 与时间记录和日志,多个后端存储
- ActiveRecord 属性钩子(设置、获取、验证)和方法钩子(保存前、保存后等)
- ACL 权限
- 事件
- 路由
- 注册表
- 依赖注入
- 缓存(内存、redis、memcached)
还有一些特定功能
- 使用类型属性(PHP 7.4)、联合类型、命名参数、属性(PHP 8.0)
- Guzaba2 目前仅支持 MySQL 和 Redis,因为这些是唯一支持协程的数据库驱动
- PostgreSQL 支持将在 Swoole 有单独(较少支持)的驱动时添加
- ActiveRecord 对象的 MySQL 存储内部使用 ID 以提高性能,而对于 API 访问,它支持 UUID
- 后端存储功能支持替换 ActiveRecord 对象的存储,但当前存在 SQL 特殊性,将阻止其与 NoSQL 数据库一起工作。这将在未来得到纠正。
- 目前没有数据库迁移支持,但将在未来添加
- 一切都是 ActiveRecord - 模型、日志条目、控制器、权限
- 可以在对象(记录)和类(静态方法)上授予权限
- 尽可能避免使用工厂
- 使用魔法方法和引用
- 使用静态代码进行配置。在启动时生成具有注入配置常量的类。
以下不支持的内容(以及可能永远不会支持的内容)
- 该框架的目标不是替换 SQL,因此不支持使用替换语言创建 SQL 查询或使用查询构建器创建查询。它支持 ActiveRecord,但不是像 Doctrine 那样完整的 ORM 实现。理由是这种类型的项目(大型、复杂且依赖于数据库的具体情况)无法避免手动编写和优化(非常)大的查询,而 SQL 语言擅长它所做的事情。不支持从一家供应商迁移到另一家供应商的数据库迁移(因为软件依赖于数据库的具体情况)。
- 没有根据 PHP 类/结构自动生成模式。相反的逻辑是存在的 - 框架根据数据库模式配置/生成类。
总体而言,框架的目的是不模糊或隐藏后端存储细节,而是使其更容易使用并减少与使用相关的错误。Guzaba2 通过基于 Swoole 并充分利用其持久内存模型和协程,提供了出色的速度和非常高的并发支持。
需求
- PHP 8.0+
- Swoole 4.5+
- MySQL 8.0+
安装
文档
文档可在这里找到。