Префиксы в маршрутизаторах свежих версий Laravel

Blade Маршрутизация Настройка Разработка Шаблоны

Автор: ACym.ru , 30 октября 2017 г.

Как бы сделать так, чтобы ресурсные маршруты в префикс-группах снова стали поименованными, как в Laravel < 5.3

Laravel становится все лучше и лучше от версии к версии.

Однако, по пути иногда теряются отдельные полезные фичи.

Например, как вы организуете маршруты с префиксами?

Очевидно, так (взято из официальной документации):

Route::prefix('admin')->group(function () {
    Route::get('users', function () {
        // Matches The "/admin/users" URL
    });
});

.Но здесь возникает один интересный вопрос. Если вы не расписываете все маршруты, а используете ресурсный контроллер (т.е. что-то вроде Route::resource('admin', 'AdminController);), то все маршруты оказываются непоименованными.

Убедиться в этом можно через стандартную команду php artisan route:list: маршрут (т.е. uri будет отображаться верно, с admin впереди, если следовать приведенному раньше примеру), а вот имен у маршрутов не будет.

Что это означает на практике? А то, что к такому маршруту нельзя обратиться по имени, т.е. конструкция в шаблоне типа {{ route('admin.blog.edit') }} не сработает.

К этому маршруту можно будет обратиться, опустив из маршрута admin, т.е. набрав {{ route('blog.edit') }}.

На первый взгляд может показаться, что "по барабану": раз так, значит будем обращаться так.

Однако, это может означать обращение не к тому маршруту, который нужен.

Если речь идет про административный раздел, то похожий маршрут без префикса admin может существовать и на морде, и вы попадете совсем не туда, куда намеревались.

Выходов из этой ситуации 2:

  1. Прописывать все маршруты в маршрутизаторе, и не использовать ресурсные маршруты там, где должен быть префикс.

  2. Использовать для ресурсных маршрутов с префиксом такую конструкцию:

    Route::group([
        'as' => 'admin.', // в конце, после admin, ставим точку, потому что дальше в именах будем от нее плясать
        'prefix' => 'admin'
    ], function () {
        Route::resource('blog', 'Admin\BlogController');
    });

В этом случае все встанет на свои места, и вы сможете спокойно идти на сайт заметок о фрэймворке Ларавель за новыми знаниями, и чтобы поделиться своими заметками.

Всем удачного кодинга!
Андрей Кимвр