CakePHP 3.x: все пути к плагину

Это не настоящий вопрос, мне нужно подтверждение, чтобы знать, понимаю ли я то, что изучаю (маршруты CakePHP).

У меня есть плагин MyPlugin. По умолчанию все запросы должны быть направлены на плагин, поэтому я хочу, чтобы имя плагина не отображалось в URL-адресе.

Например:

/pages

должно быть решено как:

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

То же самое должно относиться к префиксу «admin».

Например:

/admin/pages

должно быть решено как:

['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();
});

Судя по моим тестам, это работает. Но так как маршруты сильно изменились по сравнению с 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();
});

person Mirko Pagliai    schedule 01.04.2015    source источник


Ответы (1)


Да, это правильно. Я думаю, вы могли бы сделать короче (для проверки, но вы поняли):

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"], поскольку они уже определены ранее.

person PGBI    schedule 06.04.2015
comment
Да, @PGBI, это работа. Но теперь: как добавить домашнюю страницу для префикса администратора? Я отредактировал свой вопрос, введя код, который должен быть окончательным. Что вы думаете об этом? - person Mirko Pagliai; 08.04.2015