hhaojin / zorro
High performance AOP and Coroutine PHP Framework
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 0
Open Issues: 0
Type:project
Requires
- netresearch/jsonmapper: ^4.0
- nikic/fast-route: ^1.3
- php-di/php-di: ^6.3
- respect/validation: ^2.2
- symfony/property-access: ^5.4
- symfony/serializer: ^5.4
- symfony/yaml: ^5.4
- workerman/workerman: ^4.1
Requires (Dev)
- eaglewu/swoole-ide-helper: dev-master
- phpunit/phpunit: ^8
This package is auto-updated.
Last update: 2025-03-10 22:48:48 UTC
README
Zorro
zorro是一款轻量灵活的高性能http框架,支持路由分组,中间件,自定义注解,自定义验证器,参数绑定.
install
composer require hhaojin/zorro
quick start
1、路由
<?php require "./vendor/autoload.php"; $zorror = new \Zorro\Zorro(); //注册路由, curl -x POST http://localhost:8080/test/xxx -d '{"order_id": "world"}' $zorror->Post("/test/{name}", function (\Zorro\Context $context) { $context->json(200, ["hello" => "world"]); //使用json响应 }); $zorror->Run(8080); //启动服务, 监听8080端口 //使用workerman启动 php main.php //使用swoole启动 php main.php --SERVER=swoole
2、路由分组
<?php require "./vendor/autoload.php"; $zorror = new \Zorro\Zorro(); $zorror->Use(new \Example\RecoveryMiddleware()); //全局中间件 $orderGroup := $zorror->Group("/order"); //分组路由 { //curl http://localhost:8080/order/detail?order_id=100 $orderGroup->Get("/detail", [\Example\Handler\Order::class, "detail"]); }
3、参数绑定
<?php require "./vendor/autoload.php"; $zorror = new \Zorro\Zorro(); //注册路由, curl -x POST http://localhost:8080/test/xxx -d '{"order_id": 123}' $zorror->Post("/test/{name}", function (\Zorro\Context $context) { //对body里面的参数进行校验,并映射到实体里 /**@var \Example\Handler\OrderDeatilReq $requestParam */ $requestParam := $context->bindJson(\Example\Handler\OrderDeatilReq::class) $context->json(200, ["order_id" => $requestParam->order_id)]); //使用json响应 });
一、自定义注解
1、定义注解处理类
namespace Example\CustomAttribute; use Zorro\Aspect\JoinPoint; use Zorro\Attribute\CustomAttributeInterface; class LogHandler implements CustomAttributeInterface { public function handle($reflect, $instance, $attribute): \Closure { return function (JoinPoint $joinPoint, array $args) use ($reflect) { echo "before -> " . $reflect->getName() . PHP_EOL; $joinPoint->process($args); echo "after -> " . $reflect->getName() . PHP_EOL; }; } }
2、定义注解类
#[Attribute] #[CustomAttribute(LogHandler::class)] class TestLog { public $name; public function __construct($name) { $this->name = $name } }
3、使用注解
class OrderProduct { #[TestLog("prodList")] public function prodList($num) { echo "prodList ----->" . $num . PHP_EOL; return [ "php从入门到放弃", "k8s从放弃到佛系" ]; } } //在框架启动的时候扫描注解,会使用切面来处理,在handle中使用,会输出以下内容 \Zorro\BeanFactory::getBean(OrderProduct::class)->prodList(123); /** before -> prodList prodList -----> 123 after -> prodList * /
二、验证器
1、使用
class OrderDeatilReq { #[\Zorro\Validation\Validate("intType;between=50,100;")] public $order_id; } //在控制器中直接使用bind方法, order_id必须是数字,并且50<= order_id <=100 /**@var \Zorro\Context $context*/ $req = $context->bindJson(OrderDeatilReq::class); var_dump($req);
2、自定义规则
class EqTag extends Zorro\Validation\CustomTagAbstract { protected $tag = "eq"; public function validate($input, $value): bool { var_dump($input,$value); if ($input === $value) { return true; } return false; } } \Zorro\Validation\Validator::registerValidation(new \Example\CustomAttribute\EqTag()); //使用, 匿名类的order_id 属性必须在50-100区间,并且必须等于88 $obj = new class { #[Validate("between=50,100;eq=88", "order_id 不符合要求")] public $order_id = 100; }; \Zorro\Validation\Validator::validate($obj); // Zorro\Validation\ValidateException: order_id 不符合要求, property=order_id, // tag=eq in D:\code\program\zorro\src\Validation\Validator.php:78