将插件中的 CakePHP 路由替换为另一个路由


Replace CakePHP route from Plugin to be another route

我正在使用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);