我正在使用CakePHP插件进行用户管理,它为拒绝访问页面指定了路由。
Router::connect('/accessDenied', array('plugin' => 'usermgmt', 'controller' => 'users', 'action' => 'accessDenied'));
在我的主 Cake 应用程序中,我想"覆盖"这条路线以使用我自己的控制器。
我不想修改插件...因为它会在更新插件时导致将来的代码维护。
有没有办法用我自己的路由替换插件的路由?
尝试Router::promote()
:
路由器::p romote()
将路由(默认情况下为最后添加的路由)提升到列表的开头
如果我正确理解了您的问题,那么您只想覆盖一条路线。在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
这应该可以解决问题。"提升"除了将最后一条路由移动到顶部之外什么都不做。在 CakePHP 中,路由以先到先得的方式工作(如果您仔细检查源代码,它是一个数组),因此升级会将您最后定义的路由移动到顶部,从而覆盖插件中定义的路由。
编辑
如果您不喜欢推广,也可以在CakePlugin::routes()
之前定义路由。这也应该可以解决问题。
只是不要加载带有路由的插件,而是在应用程序/配置/路由中使用自己的路由.php
CakePlugin::load('UserManagement', array('bootstrap' => true, 'routes' => false);