我正在使用CakePHP插件进行用户管理,该插件为访问被拒绝页面指定路由。
Router::connect('/accessDenied', array('plugin' => 'usermgmt', 'controller' => 'users', 'action' => 'accessDenied'));
在我的主要蛋糕应用中,我想“覆盖”这条路线以使用我自己的控制器。
我不想修改插件...因为它会在插件更新时导致将来的代码维护。
有没有办法可以用我自己的路径替换插件的路径?
答案 0 :(得分:3)
<强>路由器::促进()强>
将路线(默认情况下,最后添加的路线)提升到列表的开头
如果我理解你的问题,你想要只覆盖一条路线。在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);