eberfreitas / cakephp-power-router
为您的蛋糕路由提供丰富的新特性
Requires
This package is auto-updated.
Last update: 2020-08-24 12:51:17 UTC
README
PowerRouter是一个插件,它扩展了默认Router的使用方式。它启用三个新功能
- 添加命名路由
- 操作匹配路由的参数
- 只有当路由符合给定条件时才匹配
要求
- CakePHP 2.x(在2.4和2.5上测试过,但应该适用于所有2.x版本)
- PHP 5.3或更高版本(应该适用于5.2,但未进行测试)
安装
使用Composer
将插件添加到项目的composer.json中 - 例如这样
{ "require": { "eberfreitas/cakephp-power-router": "dev-master" } }
由于此插件在自身的composer.json中设置了类型cakephp-plugin,Composer知道将其安装在您的/Plugins目录中,而不是在通常的vendors文件中。建议您将/Plugins/PowerRouter添加到您的.gitignore文件中。为什么?请阅读此内容。
手动
- 下载这个: http://github.com/eberfreitas/cakephp-power-router/zipball/master
- 解压下载内容
- 将生成的文件夹复制到app/Plugins
- 将您刚刚复制的文件夹重命名为
PowerRouter
GIT子模块
在您的应用目录中键入
git submodule add git://github.com/eberfreitas/cakephp-power-router.git plugins/PowerRouter git submodule init git submodule update
GIT Clone
在您的插件目录中键入
git clone git://github.com/eberfreitas/cakephp-power-router.git PowerRouter
使用
PowerRouter是一个自定义路由类,它扩展了CakeRoute。这样,您可以使用它来定义路由并利用其功能。使用它将替换match和parse方法。
match方法用于处理反向路由,而parse用于解析请求。您可以在CakePHP手册上了解更多关于自定义路由类的信息。
为了使用PowerRouter的功能,首先需要在您的app/Config/bootstrap.php中添加以下行以加载插件
CakePlugin::load('PowerRouter');
之后,将库导入到您的"app/Config/routes.php"文件中,如下所示
App::uses('PowerRoute', 'PowerRouter.Lib');
之后,您可以开始定义路由,如下所示
Router::connect( '/path', array('controller' => 'pages', 'action' => 'view'), array( 'routeClass' => 'PowerRoute', 'routeName' => 'main-path', 'callback' => $callback, 'condition' => $condition ) );
但是,如果您计划大量使用PowerRoute,则可以使用助手类PowerRouter来简化新路由的声明。在这种情况下,不要导入'PowerRoute'库,而导入'PowerRouter'库(注意"r")
App::uses('PowerRouter', 'PowerRouter.Lib');
现在您可以这样做
PowerRouter::connect( 'main-path', '/path' array('controller' => 'pages', 'action' => 'view'), array( 'callback' => $callback, 'condition' => $condition ) );
以下是PowerRouter::connect方法的描述
PowerRouter::connect($name, $route, $defaults = array(), $options = array()) { /*...*/ }
其中
$name是您想要为该路由提供的名称。理想情况下,它应该是一个唯一的标识符$route是您的路由路径,类似于/:controller/:action/:id等,就像常规路由一样$defaults是一个数组,用于描述默认路由参数,就像常规路由中的那样$options与常规路由中的options参数的工作方式相同。在这里,您还可以声明两个新的键:condition和callback。我们很快就会看看这些。
使用命名路由
因此,您可以使用PowerRouter首先定义命名路由。这将使您在执行任何类型的路由匹配时更容易、更快地匹配路由。让我们看看一个例子
PowerRouter::connect( 'about', '/about-us', array('controller' => 'pages', 'action' => 'display', 'about') );
现在,如果您想在视图中链接到这个页面,您可以这样做
echo $this->Html->link('About us', array('routeName' => 'about'));
这将匹配正确的路由。您还可以组合参数
// In your routes.php PowerRouter::connect( 'product-view', '/product/:slug/:id', array('controller' => 'products', 'action' => 'view') ); // In your views echo $this->Html->link( $product['Product']['title'], array( 'routeName' => 'product-view', 'slug' => $product['Product']['slug'], 'id' => $product['Product']['id'] ) );
使用回调函数
使用回调函数,您可以在应用使用路由参数之前对其进行操作。当路由被解析时,它返回一个数组,其中包含它将使用的参数,例如匹配的控制器、动作等。使用回调函数,您可以将信息注入或修改到该数组中。回调函数可以是任何is_callable的函数,包括闭包。让我们看看一个例子
// routes.php $transformRoute = function ($params) { $params['action'] = 'dash_' . $params['action']; return $params; }; PowerRouter::connect( 'route', '/dashboard/:controller/:action/*', array(), array('callback' => $transformRoute) );
现在,当有人点击/dashboard/user/view/123时,您将“重定向”请求到UserController::dash_view方法。回调函数被执行,实际上改变了该请求所使用的参数。
在回调函数的末尾返回$params变量非常重要,因为这将是应用程序从现在开始使用的。
使用条件回调函数
PowerRouter还启用另一种回调形式,即condition。使用该回调函数,您可以通过在回调函数中定义的条件来阻止路由的使用。函数应该返回一个表示该路由有效性的布尔值。示例
$condition = function () { return Configure::read('route') === true; }; $routes = PowerRouter::connect( 'test', '/findamatch', array( 'controller' => 'main', 'action' => 'view' ), array( 'condition' => $condition ) );
根据route配置键的值,将使用或不会使用test路由。这样,您可以根据给定环境或条件动态调整路由以响应。
或者,您可以通过传递一个回调函数数组来执行,直到其中任何一个函数拒绝访问该路由。
许可证
MIT许可证 (MIT)
版权所有 (c) 2014 Éber Freitas Dias
在此特此授予任何人免费获得此软件及其相关文档副本(“软件”)的权利,用于不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向软件提供的人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、针对特定目的的适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是基于合同、侵权或其他原因,是否与软件或其使用或其他方式有关。