Организация маршрутов в Laravel

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Здравствуй, Habr. Недавно я согласился на ревью сайта, заказанного на фрилансе. Я ожидал увидеть контроллеры, которые делают вообще все и занимают 200+ строк (и прочие проявления плохого кода), но все было вполне прилично. Валидация не лежала в контроллере, что встречается достаточно часто. Иногда, конечно, встречались некоторые несоответствия PSR-2, но все выглядело нормально, пока я не заглянул в файл с маршрутами. Он занимал несколько экранов и имел комментарии о группах маршрутов. Я связался с разработчиком и он сказал, что все немного «разрослось» и согласился поправить. В следующей версии я увидел, что он создал несколько классов со статическими методами, в которые переложил код и вызвал их, как это обычно делается, с авторизацией. Тут я вспомнил, что уже сталкивался с подобным и встречал такую аргументацию: «В документации ничего не говорится о вынесении маршрутов в разные файлы». Буквально через пару минут я нашел статью и отправил разработчику. Через пол часа я получил маршруты в нормальном виде и принял решение, что многим новичкам эта статья будет полезна. Так родился этот вольный перевод.

Если вы ни разу не правили файл RouteServiceProvider, добро пожаловать под кат.

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

Изначально laravel создает 4 файла:

  • api.php
  • console.php
  • channels.php
  • web.php

Предположим, вы планируете создать проект с десятком страниц для каждого типа пользователя:

  • Администратор [ настройки сайта, статистика и т.д. ]
  • Пользователь [ регистрация, вход, управление профилем и т.д. ]
  • Гости [ блог, контакты и т.д. ]

Создаем две директории внутри routes:

  • web — здесь описаны все маршруты, связанные с веб-интерфейсом.
  • api — здесь все маршруты, связанные с API


Перемещаем api.php из routes в директорию routes/api и web.php в routes/web, а остальные console.php и channels.php оставляем в routes.

Создаем файл admin.php внутри routes/web. Этот файл будет содержать все наши веб-маршруты, связанные с администратором, а затем создайте там user.php, для маршрутов связанных с пользователем.



app/Providers/RouteServiceProvider.php — этот файл отвечает за загрузку всех маршрутов нашего приложения. Метод map() вызывает методы mapApiRoutes() и mapWebRoutes() для загрузки файлов web.php и api.php, которые мы уже переместили, поэтому давайте исправим пути к файлам маршрутов.

protected function mapWebRoutes()
{
    Route::middleware('web')
         ->namespace($this->namespace)
         ->group(base_path('routes/web/web.php'));
}

protected function mapApiRoutes()
{
    Route::prefix('api')
         ->middleware('api')
         ->namespace($this->namespace)
         ->group(base_path('routes/api/api.php'));
}

Теперь создайте новые методы для routes/web/admin.php и routes/web/user.php внутри RouteServiceProvider.php

protected function mapAdminWebRoutes()
{
    Route::middleware('web')
        ->namespace($this->namespace)
        ->prefix('admin')
        ->group(base_path('routes/web/admin.php'));
}

protected function mapUserWebRoutes()
{
    Route::middleware('web')
        ->namespace($this->namespace)
        ->prefix('user')
        ->group(base_path('routes/web/user.php'));
}

Обратите внимание, что в данном коде возможно добавлять для путей namespace, middleware, prefix и т.д.

Далее просто вызываем их из map():

public function map()
{
    $this->mapApiRoutes();
    $this->mapWebRoutes();
    $this->mapAdminWebRoutes();
    $this->mapUserWebRoutes();
}

Последний шаг:

Откройте routes/web/user.php и добавьте тестовый маршрут:

Route::get('/test', function () {
    return response('Тестовый маршрут', 200);
});

Перейти по адресу site.local/user/test, вы должны увидеть текст «Тестовый маршрут».
Источник: https://habr.com/ru/post/474788/


Интересные статьи

Интересные статьи

Подборка новых статей по фреймворку Laravel. Разберемся как работает шифрование во фреймворке. Аутентифицируем пользователя по отпечатку пальца. Развернём приложение по методу zero-do...
У многих есть один или несколько своих домашних проектов. Это бывают небольшие утилиты, экспериментальные штуки, пробы новых технологий, “убийцы” фейсбуков и много что ещё. Заметно реже такими пр...
«Битрикс» — кошмар на костылях. Эта популярная характеристика системы среди разработчиков и продвиженцев ныне утратила свою актуальность.
Если вы последние лет десять следите за обновлениями «коробочной версии» Битрикса (не 24), то давно уже заметили, что обновляется только модуль магазина и его окружение. Все остальные модули как ...
Основанная в 1998 году компания «Битрикс» заявила о себе в 2001 году, запустив первый в России интернет-магазин программного обеспечения Softkey.ru.