tyesty / routing-annotation-reader
用于收集路由的控制器类注解读取器
1.2.1
2018-06-08 13:19 UTC
Requires
- php: >=7.1.0
README
这个小的类在给定的一组目录中索引所有的控制器类,并从动作方法中创建一个路由列表。
为了确保您的控制器动作被索引,只需向您的控制器类中添加一些文档注释,并运行注解读取器即可。
用法
- 为了正确索引,您的项目必须遵循psr-4命名空间约定,并且所有控制器类都必须有后缀
Controller。 - 所有动作方法都必须有后缀 "Action" 才能被正确索引
- 然后只需在您的类/方法的文档注释中注释控制器/动作路由
- 对于控制器类,在类文档注释中添加一个
@BaseRoute <YOUR_BASE_ROUTE>注解。 - 对于控制器动作方法,添加一个
@Route [<METHOD>] <YOUR_METHOD_ROUTE> (<YOUR_METHOD_NAME>)注解。 - 您可以通过添加一个
@Middleware <YOUR_MIDDLEWARE_CLASS>注解来为特定类中的所有方法或仅针对特定方法添加中间件。 - 按照以下示例运行注解读取器。然后它将在给定文件夹中搜索控制器类,并将遍历所有动作方法,获取文档注释并为您创建路由数组。
创建Reader对象
示例
<?php namespace foobar\Controllers; /** * Your class documentation here... * * @BaseRoute /foobar * @Middleware MyFirstMiddleware */ class FooController { /** * Your action documentation here * * @Route [GET] /test (testaction) * @Route [GET] /alternative/test (testaction-alt) */ public function myTestAction(Request $request, Response $response): Response { // do something cool ;-) return $response; } /** * Your action documentation here * * @Route [POST] /test (test-post-action) * @Middleware MySecondMiddleware */ public function myTestPostAction(Request $request, Response $response): Response { // do something cool ;-) return $response; } }
<?php require_once("vendor/autoload.php"); // initialize the reader with the base path to your controller classes $reader = new tyesty\RoutingAnnotationReader\Reader(["src"]); $reader->run(); print_r($reader->getRoutes());
将输出
Array ( [0] => Array ( [method] => get [route] => /foobar/test [action] => foobar\Controllers\FooController:myTestAction [name] => testaction [middlewares] => [ "MyFirstMiddleware" ] ) [1] => Array ( [method] => get [route] => /foobar/alternative/test [action] => foobar\Controllers\FooController:myTestAction [name] => testaction-alt [middlewares] => [ "MyFirstMiddleware" ] ) [2] => Array ( [method] => post [route] => /foobar/test [action] => foobar\Controllers\FooController:myTestPostAction [name] => test-post-action [middlewares] => [ "MyFirstMiddleware", "MySecondMiddleware" ] ) )
选项
设置控制器类后缀
为了覆盖默认的控制器类名称后缀,只需调用
$reader->setClassPostfix("YourNewPostfix");
设置动作方法后缀
为了覆盖默认的控制器动作方法名称后缀,只需调用
$reader->setMethodPostfix("YourNewPrefix");
将路由记录到文件中
要将确定的路由记录到HTML文件中,请在构造函数中添加第二个参数,设置日志文件的完整路径(包括文件名)。然后注解读取器将自动写入日志文件。请注意,这会减慢读取过程,因此请仅在开发环境中使用此选项。
$reader = new Reader(["src", "somemore", "paths"], "/path/to/your/logfile.html");
设置缓存文件夹(启用缓存)
如果您想缓存确定的路由,可以将缓存文件夹设置为想要保存缓存文件的位置。这将自动启用缓存机制。请注意,您必须手动处理缓存失效。因此,这并不真正推荐,最好让注入类处理缓存。尽管如此,如果您想启用缓存,只需这样做
$reader->setCacheFolder("/path/to/cache/folder");
创建自定义日志处理器
如果您想使用自定义日志处理器而不是内置的(请参见“将路由记录到文件”),您可以将它传递给构造函数作为可调用对象。此可调用对象必须接受一个参数,即当前Reader对象。然后,在方法/可调用类内部,您可以完全访问完整的Reader对象。
$reader = new Reader([...], null, function(Reader $reader) { /* do something */ });
路由注入
将路由注入到Slim应用程序
为了将路由注入到您的Slim应用程序中,您可以使用SlimRouter类及其静态的 inject 方法。此方法接受四个参数
示例
$app = new \Slim\App($container); SlimRouter::inject( new Reader(["src", "somemore", "paths"]), "app", "/path/to/cache/folder", 60 );