squidit/slim-attribute-router

Slim (v4) 框架 - 属性路由器

v0.1.2 2021-01-21 01:25 UTC

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();