louiss0 / slim-route-registry
此包允许您使用属性php注册路由并创建资源控制器
Requires (Dev)
- php-di/slim-bridge: ^3.0.0
- phpunit/phpunit: ^9
- slim/http: dev-master
Suggests
- php-di/slim-bridge: Allows you to use Request or response injection, Request or response injection and controllers as services
README
Slim Route Registry
使用方法
slim route registry 库是一个库,它使用控制器及其元数据来自动创建路由分组和设置中间件。控制器用作创建路由和它们使用的方法的模型。此库是为 slim php 创建的。
安装
composer require louiss0/slim-route-registry
设置
要设置此库,您必须首先创建 slim 应用程序并将其传递到设置方法中。
use Slim\Factory\AppFactory; use Louiss0\SlimRouteRegistry\RouteRegstry $app = AppFactory::create(); RouteRegistry::setup($app);
这样做将为创建称为 "Resource Controllers" 的控制器设置所有必要的系统。
部分
资源
资源控制器是一个控制器,它要么将路由方法属性附加到方法,要么使用自动注册方法。它是一个包含资源方法所需信息的控制器。要创建资源,您创建一个类,然后将其路由方法属性附加到其方法之一。
- 要注册资源,请使用路由注册的资源方法。
RouteRegistry::resource(string $path, string $class_name);
- 要注册多个资源,请使用 resources 方法
RouteRegistry::resource(array $resource_options);
手动资源
手动资源是一个通过将其路由方法属性附加到其方法创建的控制器。路由属性将告诉 RouteMethodAttribute 是所有其他属性继承自该属性的主属性,并具有预定义的 http 请求方法。
路由方法属性是一个包含三个参数的属性。
- path - 路由相对于 group scope 的路径
- name - 将创建的路由的名称
- method - 将响应的 http 请求 小写 方法
注意,您不需要直接使用路由方法属性,您可以使用从它们继承的属性。
// will tell the resource method to register a http get request #[Get(name, path)] function fetchTheCars(){} // will tell the resource method to register a http post request #[Post(name, path)] function loginAUser(){} // will tell the resource method to register a http patch request #[Patch(name, path)] function changeTheCarInfo(){} // will tell the resource method to register a http put request #[Put(name, path)] function putTheArticleInTheCollectionOrCreateANewOne(){} // will tell the resource method to register a http delete request #[Delete(name, path)] function deleteThisPost(){}
自动资源
自动资源是一个使用自动注册方法的控制器。
自动注册方法是一个名称,该名称将被资源方法用于根据其名称注册路由。
// Will be used as a plain get request handler function collect() {} // Will be used as a get request handler with id passed as params function show() {} // Will be used as a plain post request handler function store() {} // Will be used as a put request handler with id passed as params function upsert() {} // Will be used as a patch request handler with id passed as params function update() {} // Will be used as a delete request handler with id passed as params function destroy() {}
注意:如果您将这些方法之一的路由方法属性添加到这些方法中,您将得到一个错误
注意:id 参数必须是 int
分组作用域
在大多数应用程序中,您可能希望拥有在分组下包装资源的能力,该分组将用于在调用任何方法之前调用中间件,或控制用户必须使用的路径以访问资源。为此,您可以使用 group 方法。
RouteRegistry::group(string $path, Closure $closure);
- 路径是 group 方法中使用的模式
- 闭包将是 group 方法闭包中调用的函数。当您在闭包中传递资源方法时,资源路径将按常规追加到分组路径
中间件
您可以通过在方法和控制器上使用 Use Middleware Attributes 以及控制器方法来在您的应用程序中使用中间件。您可以告诉资源方法创建在请求处理程序调用之前或多个请求处理程序调用之前调用的相同中间件。
#[UseMiddleware([TestMiddleware::class])] class Controller {} class Controller { #[UseMiddleware([TestMiddleware::class])] function getOrdersByName(){} }
资源中间件
要将中间件应用于从资源方法创建的路由组,您需要在控制器上使用Use Middleware属性。
// takes a string of middleware #[UseMiddleware(array $middleware)] class PostController {}
方法中间件
当涉及到将中间件放入路由时,您必须使用实现了Middleware接口的类作为属性或以下属性在控制器上
#[UseMiddlewareOn(array $method_names, array $middleware)] class AuthController {}
- 方法名称是中间件将要添加到的路由的处理程序名称。中间件只适用于这些路由。
#[UseMiddlewareExceptFor(array $method_names, array $middleware)] class PostController {}
- 方法名称是中间件不会添加到的路由的处理程序名称。中间件适用于除这些路由之外的所有路由。
注意:中间件将按以下顺序应用。
UseMiddlewareOnUseMiddlewareExceptFor
注意:
UseMiddlewareOn和UseMiddlewareExceptFor属性是可重复的
#[ UseMiddlewareOn( ["collect", "destroy"], [] ), UseMiddlewareOn( ["update", "store"], ) ] class Controller {}
#[ UseMiddlewareOn(["collect", "store"],[Test4Middleware::class]) UseMiddlewareExceptOn(["collect", "upsert"],[Test3Middleware::class]) ] class Controller {}
分组中间件
要将中间件添加到组中,请使用由RouteRegistry::group()方法创建的
RouteRegistry::groupMiddleware(MiddlewareInterface...$middleware);