opsway / slim-attribute-router
支持分组和中间件的Slim属性路由器
v0.1.1
2022-05-05 09:13 UTC
Requires
- php: ^8.0
- beberlei/assert: ^3.3.0
- slim/slim: 4.*
Requires (Dev)
- opsway/psr12-strict-coding-standard: ^0.5.0
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.22
README
属性路由器
此包允许您使用属性将路由添加到slim4 (https://slim.php.ac.cn) 应用程序。
特性
- 支持路由方法
- 支持路由名称
- 支持路由分组
- 支持中间件
安装
可以使用Composer安装此包
导航到您项目的根目录并执行下面的bash命令
composer require opsway/slim-attribute-router
启用属性路由器
属性路由器扩展了slims默认的RouteCollector,您只需要实例化属性路由器并将其传递给AppFactory。第一个参数是应用命名空间的部分数组。它将用于筛选参数搜索的类。
<?php use OpsWay\Slim\AttributeRouter\Router; use Slim\Factory\AppFactory; $route = new Router([ ['NameSpace'], // array of namespaces parts of app AppFactory::determineResponseFactory(), new CallableResolver($container) // optional DI container ); AppFactory::setRouteCollector($attributeRouteCollector); $app = AppFactory::create(); $app->run();
属性签名
#[Route({methods}, {path}[[, {group}][, {name}][, {isDeprecated}]])]
- "methods" 参数是必需的,且不能为空
- "path" 参数是必需的,且不能为空
- 其余参数都是可选的
#[Group({name} [[, {classes}]])]
- "name" 参数是必需的,且必须符合URI字符串的要求
- "classes" 参数是可选的。实现Psr\Http\Server\MiddlewareInterface的类的列表
#[Middlewares({firstClass} [, {secondClass}])]
- "firstClass" 参数是必需的,且必须是实现Psr\Http\Server\MiddlewareInterface的类的名称
- "secondClass" 和所有其他参数都是可选的。
- 构造函数的所有参数都将转换为中间件类的数组。至少应该有一个中间件类。
指定属性示例
在类级别指定具有名称和分组参数的路由的示例
<?php use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; #[Route([Route::METHOD_GET], '/api/hello-world', '/hello-world-group', 'api.hello-world.route-name')] class HelloWorld { public function __invoke(Request $request, Response $response): Response { // some php code return $response; } }
在方法级别指定无额外参数的路由的示例
<?php use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; class HelloWorld { #[Route([Route::METHOD_GET], '/api/hello-world')] public function __invoke(Request $request, Response $response): Response { // some php code return $response; } }
在类级别指定具有中间件的分组的示例
<?php use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; #[Group('/api', [FirstMidleware::class, SecondMidleware::class])] class HelloWorld { public function __invoke(Request $request, Response $response): Response { // some php code return $response; } }