将CakePHP路由从插件替换为另一条路由

时间:2013-09-15 23:34:26

标签: php cakephp url-routing cakephp-2.4

我正在使用CakePHP插件进行用户管理,该插件为访问被拒绝页面指定路由。

Router::connect('/accessDenied', array('plugin' => 'usermgmt', 'controller' => 'users', 'action' => 'accessDenied'));

在我的主要蛋糕应用中,我想“覆盖”这条路线以使用我自己的控制器。

我不想修改插件...因为它会在插件更新时导致将来的代码维护。

有没有办法可以用我自己的路径替换插件的路径?

2 个答案:

答案 0 :(得分:3)

尝试Router::promote()

  

<强>路由器::促进()
  将路线(默认情况下,最后添加的路线)提升到列表的开头

如果我理解你的问题,你想要只覆盖一条路线。在app/Config/routes.php中,添加覆盖的路线,并在CakePlugin::routes();

之后添加宣传
//.... your routes....

//Here the plugin routes being loaded
CakePlugin::routes();

//Overwrite route:
Router::connect('/accessDenied', array('plugin' => 'usermgmt', 'controller' => 'users', 'action' => 'accessDenied'));
Router::promote(); //and promote it

这应该可以解决问题。 Promote除了将最后一条路线移到顶部之外什么都不做。在CakePHP中,路由以先来先服务为基础(如果你check the source closely它是一个数组),所以推广会将你最后定义的路由移到顶层,从而覆盖插件中定义的路由

修改

如果您不喜欢推广,您还可以在 CakePlugin::routes()之前定义路线。这应该也可以解决问题。

答案 1 :(得分:2)

只是不要在路径中加载插件并在app / Config / routes.php中使用你自己的插件

CakePlugin::load('UserManagement', array('bootstrap' =>  true, 'routes' => false);