opsway/slim-attribute-router

支持分组和中间件的Slim属性路由器

v0.1.1 2022-05-05 09:13 UTC

This package is auto-updated.

Last update: 2024-09-05 14:28:34 UTC


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;
    }
}