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

CakePHP 3.x:插件的所有路由,cakephp,cakephp-3.0,cakephp-routing,Cakephp,Cakephp 3.0,Cakephp Routing,这不是一个真正的问题,我需要确认我是否理解我正在学习的内容(CakePHP的路线) 我有插件MyPlugin。默认情况下,所有请求都应该指向插件,因此我希望插件名称不会出现在url中 例如: /pages /admin/pages 应解决为: ['controller' => 'pages', 'action' => 'index', 'plugin' => 'MyPlugin'] ['controller' => 'pages', 'action' => '

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

我有插件
MyPlugin
。默认情况下,所有请求都应该指向插件,因此我希望插件名称不会出现在url中

例如:

/pages
/admin/pages
应解决为:

['controller' => 'pages', 'action' => 'index', 'plugin' => 'MyPlugin']
['controller' => 'pages', 'action' => 'index', 'plugin' => 'MyPlugin', 'prefix' => 'admin']
这同样适用于“admin”前缀

例如:

/pages
/admin/pages
应解决为:

['controller' => 'pages', 'action' => 'index', 'plugin' => 'MyPlugin']
['controller' => 'pages', 'action' => 'index', 'plugin' => 'MyPlugin', 'prefix' => 'admin']
简而言之,您必须想象应用程序(除了
MyPlugin
)没有控制器

我学习过(特别是和),现在我想知道这个代码是否正确:

Router::defaultRouteClass('InflectedRoute');

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

Router::scope('/', ['plugin' => 'MeCms'], function ($routes) {  
    $routes->fallbacks();
});
从我的测试来看,这似乎有效。但是,由于与CakePHP2.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();
});

是的,没错。我认为你可以做得更短(有待测试,但你明白了):

编辑: 要将主页添加到管理部分,请执行以下操作:

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”]
,因为它以前已经定义过了。

是的@PGBI,这很有效。但是现在:如何为管理员前缀添加主页?我已经编辑了我的问题,输入了应该是最终的代码。你觉得怎么样?