【问题标题】:Replace CakePHP route from Plugin to be another route将 Plugin 中的 CakePHP 路由替换为另一条路由
【发布时间】:2013-09-15 23:34:26
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php cakephp url-routing cakephp-2.4


    【解决方案1】:

    试试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 中,路由以先到先服务的方式工作(如果您 check the source closely 它是一个数组),因此提升会将您最后定义的路由移到顶部,从而覆盖插件中定义的路由。

    编辑

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

    【讨论】:

    • 您编辑中的信息对我有用。感谢您的帮助!
    【解决方案2】:

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

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

    【讨论】:

    • 插件加载了 52 条路由,如果可能的话我想避免重新定义其中的 51 条来避免 1 条。
    猜你喜欢
    • 2013-03-22
    • 1970-01-01
    • 2011-01-09
    • 2018-04-02
    • 2019-09-22
    • 2020-11-26
    • 2012-01-21
    • 2018-01-06
    • 1970-01-01
    相关资源
    最近更新 更多