О web-разработке
и даже немного больше...

Использование URL-путей из роутов в Laravel 8.x

Как вы наверное уже знаете, веб-фреймворк Laravel построен по модели MVC (Модель-представление-контроллер). В этой концепции одну из ключевых ролей играет роуты (routes), выполняя маршрутизацию URL адресов в системе. Роуты позволяют сопоставить запрашиваемый адрес на сайте с методом контролера. Далее в самом контроллере происходит процесс взаимодействия с моделью и шаблонами.

При правильном подходе, для каждой записи URL в роуте можно задать уникальное название. Мы можем получать значение путей обратившись к конкретному роуту из контроллера или шаблона. Такой подход существенно сокращает вероятность появления ошибочных адресов на сайте. И в случае, если вы решили изменить какие-либо URL-адреса в проекте, то их достаточно будет поменять в самом файле роута. Стоит сразу обозначить, что тут мы будем рассматривать примеры на основе Laravel 8.x.

Приведём простой пример, допустим, что у вас в роутах прописаны несколько адресов следующего вида:

Route::get('/', function () {
    //
})->name('home');


Route::get('/about', function () {
    //
})->name('about');


Route::get('/contact', function () {
    //
})->name('contact');

Чтобы не усложнять пример, мы не будет подключать контроллеры в роутах. То, на что стоит обратить внимание — это метод name(), которому мы и передаём имя конкретного роута. Зная имя какого-либо роута, мы можем вставить его URL-путь в шаблоне, таким образом:

<div class="links">
    <a href="{{ route('home') }}">Home</a>
    <a href="{{ route('about') }}">About</a>
    <a href="{{ route('contact') }}">Contact</a>
</div>

В итоге в тех местах подставиться URL-пути, которые заданы для этого роута. Это довольно удобно, особенно когда различных ссылок в проекте будет целое множество. Если говорить о ссылках, которые должны быть динамическими, то это можно сделать следующим образом:

В роутах мы обозначаем этот параметр в фигурные скобки:

Route::get('/page/show/{id}', function($id){
	//
})->name('single');

В этом случае {id} – можно будет подставлять при обращении к роуту из шаблона. В результате получать уже преобразованный путь с нужными параметрами.

<div>
@foreach ($data as $item)
	<div class="aler alert-info">
		<p>{{ $item->preview }}</p><hr>
			<a href="{{ route('single', $item->id) }}">Детально</a>
		</p>
	</div>
@endforeach
</div>

Здесь записи выводятся в цикле foreach, а ссылки подставляются через route() передавая имя роута и id-элемента. Но как быть, если необходимо передать несколько параметров? Да очень просто, передаём параметры таким же образом, только в виде массива.
В роуте задаём правило для нескольких параметров:

Route::get('/page/show/{cat_id}/{id}/', function($cat_id, $id){
	//
})->name('single');

В шаблоне обращается к роту как и в предыдущих примерах, лишь с небольшой разницей в передаче параметров методу route():

<div>
@foreach ($data as $item)
	<div class="aler alert-info">
		<p>{{ $item->preview }}</p><hr>
			<a href="{{ route('single', ['cat_id' => $item->cat_id, 'id' => $item->id]) }}">Детально</a>
		</p>
	</div>
@endforeach
</div>

Как вы можете заметить, изменилось только то, что мы передали методу route() в качестве второго параметра ассоциативный массив, с набором значений. Эти значения будут подставлены в путь, который будет преобразован согласно этим параметрам.

Все описанные здесь примеры — это лишь малая часть возможностей Laravel. Функциональность в действительности куда более масштабна разными возможностями. Поэтому для более детального изучения возможности использования роутов в Laravel, рекомендую смотреть в документации по фреймворку:
https://laravel.com/docs/8.x/routing#named-routes

На этом у меня пока всё, всем всего доброго!

Опубликован: 12.03.2021 г.

См. также:

Как просмотреть SQL запрос в Eloquent Laravel?
Как объявить переменную в шаблоне Laravel Blade?
Проверка на пустоту коллекций Eloquent в Laravel
Как получить URL текущей страницы в Laravel?
Как вывести роуты Laravel в отдельный файл?
Как получить случайные записи из БД в Laravel?
Ограничение выборки (LIMIT) данных в Laravel
Как перенести Laravel на боевой сервер?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта