CakePHP 3.x:插件的所有路由

时间:2015-04-01 18:25:56

标签: cakephp cakephp-3.0 cakephp-routing

这不是一个真正的问题,我需要确认一下我是否理解我正在学习的东西(CakePHP的路线)。

我有插件MyPlugin。默认情况下,所有请求都应该定向到插件,所以我希望插件名称不会出现在网址中。

例如:

/pages

应解决为:

['controller' => 'pages', 'action' => 'index', 'plugin' => 'MyPlugin']

同样适用于“admin”前缀。

例如:

/admin/pages

应解决为:

['controller' => 'pages', 'action' => 'index', 'plugin' => 'MyPlugin', 'prefix' => 'admin']

简而言之,您必须想象应用程序(除了MyPlugin之外)没有控制器。

我研究了routes(特别是thisthis),现在我想知道这段代码是否正确:

Router::defaultRouteClass('InflectedRoute');

Router::prefix('admin', function ($routes) {
    $routes->plugin('MeCms', ['path' => '/'], function ($routes) {
        $routes->fallbacks();
    });
});

Router::scope('/', ['plugin' => 'MeCms'], function ($routes) {  
    $routes->fallbacks();
});

从我的测试来看,这似乎有效。但是,由于与CakePHP 2.x相比,路线发生了很大变化,我希望确认您已经理解。

感谢。


修改

感谢PGBI,这段代码 应该是最终的:

Router::scope('/', ['plugin' => 'MeCms'], function ($routes) {
    Router::connect('/admin', ['controller' => 'Pages', 'action' => 'index', 'plugin' => 'MeCms', 'prefix' => 'admin']);

    $routes->prefix('admin', function ($routes) {
        $routes->fallbacks();
    });
    $routes->fallbacks();
});

1 个答案:

答案 0 :(得分:3)

是的,这是正确的。我认为你可以做得更短(进行测试,但你明白了):

Router::scope('/', ['plugin' => 'MeCms'], function ($routes) {  
    $routes->prefix('admin', function ($routes) {
        $routes->fallbacks();
    });
    $routes->fallbacks();
});

编辑: 要将主页添加到管理部分:

Router::scope('/', ['plugin' => 'MeCms'], function ($routes) {  
    $routes->prefix('admin', function ($routes) {
        $routes->connect('/', ['controller' => 'Pages', 'action' => 'index']);
        $routes->fallbacks();
    });
    $routes->fallbacks();
});

您不需要重复['plugin' => 'MeCms']["prefix" => "admin"],因为它之前已经定义过。