tyesty/routing-annotation-reader

用于收集路由的控制器类注解读取器

1.2.1 2018-06-08 13:19 UTC

This package is auto-updated.

Last update: 2024-09-24 05:00:21 UTC


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