Маршрутизация в Laravel 8: как это делать правильно
После прочтения этой статьи вы узнаете, как:
- определять базовые маршруты в Laravel;
- использовать основные HTTP методы;
- обрабатывать маршруты с контроллерами и без;
- задействовать параметры, имена и группы маршрутов.
Для понимания материала, изложенного в этой статье, необходимы базовые знания PHP, при этом навыков работы с Laravel не требуется. Предполагается, что Laravel и Composer у вас уже установлены.
Введение

Самая основная и важная функция серверных фреймворков – это способность получать запросы пользователя и возвращать ответы в виде HTML-страниц или даже документов JSON. Такое взаимодействие сервера и клиента возможно благодаря HTTP(S) маршрутизации: уже этот факт сам по себе объясняет степень важности маршрутов.
Laravel значительно упрощает определение маршрутов, передачу им кода на исполнение, а также решает множество других задач, связанных с маршрутизацией. По умолчанию Laravel при установке создает каталог для работы с маршрутами. Эта папка содержит четыре файла – api.php, channels.php, console.php и web.php. Первый файл (api.php) используется для обработки маршрутов API интерфейсов, остальные три – для всех остальных случаев. В этой статье мы сосредоточимся на файле web.php – все наши маршруты будут располагаться в нем.
Приступим
Создайте новый проект Laravel и откройте файл web.php. На вашем экране должно быть то же самое, что и у меня.

Базовый файл web.php в Laravel
Все, что мы здесь видим – ответ Laravel на запрос корневого маршрута вашего домена, «/». Используется замыкание, которое выдает содержимое файла welcome.blade.php из каталога views. Ниже мы рассмотрим полученный результат более подробно.
Определение маршрутов в Laravel
Маршруты в Laravel задаются с использованием класса Route и HTTP методов, маршрута для ответа, и замыкания (или метода контроллера).

Определение маршрута в Laravel
HTTP методы
Это действия для создания пользовательских HTTP запросов. В предыдущем примере вы уже видели методы GET и POST. Рассмотрим, какие функции выполняют эти и другие запросы.
GET – в основном используется для получения данных с сервера и их передачи пользователю без внесения каких-либо изменений.
POST – позволяет создавать новые ресурсы и записи на сервере, также может использоваться для отправки данных с целью дальнейшей обработки (например, для проверки информации или в процессе авторизации). Считается более безопасным методом отправки конфиденциальной информации, чем GET.
PUT – во многом метод аналогичен методу POST; отсылает данные на сервер, как правило, для обновления записей вместо создания новых.
DELETE – название этого метода говорит само за себя, он удаляет существующую запись из базы данных.
Замыкания
Замыкание – это, по сути, анонимная функция, которой не требуется имя для вызова. Могут передаваться как объекты, присваиваться переменным, или даже передаваться другим функциям или методам.
Можно написать все приложение с использованием замыканий, но из практических соображений рекомендуется использовать их лишь в самых небольших программах, так как весь код располагается в одном файле, что сделает логику нечитаемой.
Обработка маршрутов
С использованием замыканий
Независимо от используемой версии Laravel, это самый простой и понятный способ.

Обработка маршрутов с замыканиями
Обратите внимание на использование метода view(). В отличие от других фреймворков для создания веб-приложений, в которых необходимо указывать расположение каталога, содержащего пользовательские представления, Laravel все автоматически делает за вас и даже предоставляет простой метод для связи контроллера или замыкания с представлением.
Поэтому всякий раз, когда вы используете метод view (), Laravel возвращает шаблон Blade (.blade.php) или PHP-файл (.php) из каталога views.
С использованием контроллеров – Laravel 7
Этот способ, на мой взгляд, еще проще, чем метод для Laravel 8, но это только мое мнение.

В среде Laravel 7
С использованием контроллеров – Laravel 8
Почти то же самое, но с учетом синтаксических изменений в Laravel версии 8.

В среде Laravel 8
Еще одно различие – в Laravel 8, помимо представления второго параметра в виде массива, вам также потребуется импортировать контроллеры.

Файл routes.php в Laravel 8
Параметры маршрута
Довольно часто приходится иметь дело с динамическими маршрутами, которые используются для генерации одной страницы с динамическим контентом, передаваемым в маршруте. Параметры маршрута – это динамические сегменты в структуре URL-адреса.
Мы видим параметры маршрута каждый день, на многих сайтах. Facebook, Linkedin, Twitter, например, используют именно динамические маршруты. Laravel позволяет очень легко определять динамические маршруты, внося лишь некоторые изменения в базовое определение.

Параметры маршрута
Часть /users/ - это статическая часть маршрута, а фрагмент в фигурных скобках показывает, что он динамический - посещение /users/Zubair вернет «Hello Zubair».
Обратите внимание на то, как переменная была передана в замыкание. Параметры маршрута необязательно размещать в самом конце, их можно задавать где угодно.

Произвольное размещение параметров
Параметры маршрута с контроллерами
Маршрут определяется обычным способом, и метод контроллера тоже не претерпевает особых изменений, за исключением того, что ему передается аргумент (вместо того, чтобы оставить его пустым). Не забудьте импортировать контроллеры в файл web.php.

Параметры маршрута с контроллерами
Названия маршрутов
Laravel предусматривает очень простой и безопасный (возможно, лучший) способ ссылок на маршруты с использованием коротких имен, вместо постоянного использования полных маршрутов (фактических путей к ресурсам), что со временем ведет к путанице.
Каждому маршруту, определенному в файле web.php, может быть присвоено уникальное имя, которое избавляет от многих проблем, как показано в приведенном ниже примере.

Короткие названия маршрутов
Зачем использовать короткие названия маршрутов
Для этого есть несколько причин. Если пользователь набирает адрес в строке браузера, ему проще указать «users», например, вместо фактического пути «pages/users». Второе важное преимущество – простота разработки и обслуживания: всякий раз, когда вы меняете путь, не изменяя названия, фактический маршрут автоматически изменяется везде, где было упомянуто короткое название.
Помощник route()
В Laravel есть помощник route(), который помогает ссылаться на маршруты по их именам в вашем интерфейсном коде.

Присвоение имени маршруту в Laravel 8
Обратите внимание на то, как название маршрута было использовано вместо фактического пути. Если в реальный путь в дальнейшем будут внесены изменения, редактирование кода не потребуется.
Использование параметров в именованных маршрутах
На самом деле нет никакой разницы в использовании параметров, поскольку вы просто даете название существующему, определенному маршруту. Всю работу в пользовательской части приложения выполняет помощник route(), и вот так вы передаете ему параметры.

Передача параметров в именованных маршрутах
Предположим, что метод или замыкание принимают больше одного параметра. Несколько параметров вы можете передать следующими способами:
- Можно упорядочить параметры в массиве помощника route() так же, как они были упорядочены в замыкании или методе.
- Вы также можете создать ассоциативный массив с параметрами в виде ключей и соответствующими им значениями.
Использование строк запросов с именованными маршрутами
С передачей строк запросов именованным маршрутам в Laravel все обстоит очень просто.

Передача строк запросов именованным маршрутам
Строка запроса передается как обычный элемент массива, если в замыкании нет соответствующего параметра. Если в замыкании присутствует «?», оно прикрепляется как строка запроса.
Вот и все на сегодня, спасибо за внимание. Если у вас есть какие-либо вопросы или советы, пожалуйста, оставьте их в комментариях к этой статье.
Комментарии