squidit / slim-attribute-router
Slim (v4) 框架 - 属性路由器
v0.1.2
2021-01-21 01:25 UTC
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-21 10:07:15 UTC
README
属性动作/控制器路由器
此软件包允许您使用动作类中的属性在 slim4 (https://slim.php.ac.cn) 应用程序中添加路由。
特性
- 路由方法支持
- 路由名称支持
属性签名
#[Route({route}[[, {methods}], {routeName}])]
向 ActionController 添加属性
如果您想使用属性添加路由,您可以在类方法中添加 #[Route({route}[[, {methods}], {routeName}])]
路由标签。请参阅示例
示例
网址测试 1: https://server.name/test1/http/202
<?php use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; class StatusCodeAction { #[Route('/test1/http/{statusCode:[1-5]{1}\d{2}}',['GET', 'POST', 'PUT', 'DELETE'], 'test_http_statuscode')] public function __invoke(Request $request, Response $response, array $args): Response { // action/controller code return $response; } }
不带 'name' 参数的示例
网址测试 2: https://server.name/test2/http/202
网址测试 3: https://server.name/test3/http/202
<?php use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; class StatusCodeAction { #[Route('/test2/http/{statusCode:[1-5]{1}\d{2}}',['POST'])] public function testMethod2(Request $request, Response $response, array $args): Response { // action/controller code return $response; } #[Route('/test3/http/{statusCode:[1-5]{1}\d{2}}',['DELETE'])] public function testMethod3(Request $request, Response $response, array $args): Response { // action/controller code return $response; } }
- 编写路由属性时需要指定方法参数
- 实例化属性路由器时需要指定您的 ActionController 文件路径
安装
可以使用 Composer 安装此软件包
进入您的项目根目录并执行下面的 bash 命令
composer require squidit/slim-attribute-router
启用属性路由器
我们的属性路由器扩展了 slims 的默认 RouteCollector,因此我们只需实例化我们的属性路由器并将其传递给 AppFactory 即可。
<?php use SquidIT\Slim\Routing\AttributeRouteCollector; use Slim\Factory\AppFactory; // create AttributeRouteCollector $attributeRouteCollector = new AttributeRouteCollector([ 'path' => [ '/path/to/ActionControllers', '/different/path/to/ActionControllers/if/needed', ]], AppFactory::determineResponseFactory(), new CallableResolver($container) // pass in your DI container if you are using a container ); // Instantiate the app AppFactory::setRouteCollector($attributeRouteCollector); $app = AppFactory::create(); $app->run();