arminvieweg / slim-routing-manager
Slim Framework 的控制器和注解路由
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 标准的路由 | 将路由证明给控制器动作 |
@noPrefix | None | 如果设置了路由前缀,则跳过将前缀附加到路由 |
@Method | get/post/delete/put/option | 用于路由的 HTTP 方法 |
@Name | String | 路由的名称 |
与函数本身相关的参数和其他一切都不偏离官方 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 数组存储了路由管理器正在扫描的控制器修改时间。如果控制器发生变化,文件的修改时间将不同于该数组中存储的时间,并且缓存将被刷新。