arminvieweg/slim-routing-manager

Slim Framework 的控制器和注解路由

2.2.2 2015-10-25 18:55 UTC

This package is auto-updated.

Last update: 2024-08-28 08:57:23 UTC


README

这是一个 https://github.com/LeaseWeb/slim-routing-manager 的分支

此存储库是从 JLaso 的 RoutingCacheManager 分支出来的,它包含一些增强功能,例如更高级的路由缓存形式和对最新版本 Slim 的支持

我想感谢 Patrick JL Laso 为提供这个组件所基于的原始代码。

初始化路由管理器

要初始化路由管理器,您需要将以下行添加到启动您的 Slim 应用的 index.php 文件中

    // Initialize the Routing Manager
    $routingManager = new RoutingManager(
        array(
            '/path/to/controllers/'
        ), '/path/to/cache/dir/'
    );
    $routingManager->generateRoutes();

路由管理器支持扫描多个目录以查找控制器。如果您有一个前端/后端类型的系统,这非常有用。

路由前缀

路由管理器支持为每个路由添加前缀(如 API 版本)。这可以通过运行 $routingManager->setRoutePrefix('/v1'); 或在路由管理器的构造函数中定义来实现。

如果您有一个不希望添加前缀的控制器动作,可以使用 @noPrefix 注解。

控制器结构

对于路由管理器来说,控制器本身的结构并不重要。它唯一要求的是通过注解定义路由。

路由管理器支持以下注解

注解描述
@Route符合 Slim 标准的路由将路由证明给控制器动作
@noPrefixNone如果设置了路由前缀,则跳过将前缀附加到路由
@Methodget/post/delete/put/option用于路由的 HTTP 方法
@NameString路由的名称

与函数本身相关的参数和其他一切都不偏离官方 Slim 标准。因此,可以像在 Slim 中通常定义路由那样定义默认变量。

然而,我们建议将控制器动作命名为 xAction(类似于 symfony 2 控制器动作)。

示例

    /**
     * Class TestController
     *
     * @package Lsw\Controller
     */
    class TestController
    {
        /**
         * Test action
         *
         * @Route('/test/index(/:param1)(/:param2)')
         *
         * @Method('GET')
         * @Name('test.index')
         *
         * @param $param1
         * @param $param2
         *
         */
        public function indexAction($param1 = 1, $param2 = 2)
        {
            echo sprintf('param1: %s, param2: %s', $param1, $param2);
        }
    
    }

多个路由

路由管理器还支持为每个动作定义多个路由

  /**
         * Test action
         *
         * @Route('/test/index(/:param1)(/:param2)')
         * @Route('/alternative-route/index(/:param1)(/:param2)')
         * @Route('/alternative-route-2/index/:param1/:param2')
         *
         * @Method('GET')
         * @Name('test.index')
         *
         * @param $param1
         * @param $param2
         *
         */

以下路由将被生成

    $app->map("/test/index(/:param1)(/:param2)", "\Lsw\Controller\TestController:indexAction")->via("GET")->name("test.index");
    $app->map("/alternative-route/index(/:param1)(/:param2)", "\Lsw\Controller\TestController:indexAction")->via("GET")->name("test.index");
    $app->map("/alternative-route2/index/:param1/:param2", "\Lsw\Controller\TestController:indexAction")->via("GET")->name("test.index");

所有路由都是独立处理的。这意味着一些路由可能需要传递参数,而另一些则可以省略参数。然而,实际抛出异常的检查是由控制器动作控制的,而不是路由本身,因此它只影响路由的有效性。

缓存

'cache' 路径必须可写,以供 http/apache 守护进程用户使用。

这个库的本质是根据注解创建 Slim 路由。因此,只有在控制器本身发生变化或缓存路由文件被删除时,路由管理器才会扫描控制器。

默认情况下,生成的 compiled_routes.php 将生成以下结构

    /**
     * Generated with \Lsw\Routing\Manager
     *
     * on 2015-02-10 02:24:41
     */
    $modTimes = array (
      '/srv/shared/sho/RoutingManagerTest/src/Lsw/Controller/TestController.php' => 1423574678    
    );
    $app = Slim\Slim::getInstance();
    
    $app->map("/test/index", "\Lsw\Controller\TestController:indexAction")->via("GET")->name("test.index");
    

modTimes 数组存储了路由管理器正在扫描的控制器修改时间。如果控制器发生变化,文件的修改时间将不同于该数组中存储的时间,并且缓存将被刷新。