1

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

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

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

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

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

4

2 回答 2

3

尝试Router::promote()

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

这应该够了吧。提升只是将最后一条路线移到顶部。在 CakePHP 中,路由以先到先服务的方式工作(如果您仔细检查源代码,它是一个数组),因此提升会将您最后定义的路由移到顶部,从而覆盖插件中定义的路由。

编辑

如果不喜欢推广,也可以 CakePlugin::routes()定义路由。这也应该可以解决问题。

于 2013-09-16T05:22:59.117 回答
2

只需不要使用路由加载插件并在 app/Config/routes.php 中使用您自己的

CakePlugin::load('UserManagement', array('bootstrap' =>  true, 'routes' => false);
于 2013-09-15T23:39:25.260 回答