Именованные маршруты
Именованные маршруты позволяют назначать маршрутам понятные имена, что упрощает генерацию URL-адресов и выполнение переадресаций в приложении.
Основы именования маршрутов
Чтобы присвоить маршруту имя, используйте метод name():
Route::get('/user/settings', $callback)->name('settings');
PHP
Важно: Имена маршрутов должны быть уникальными в рамках всего приложения.
Генерация URL для именованных маршрутов
После назначения имени маршруту вы можете легко создавать URL-адреса:
// Базовый способ
$url = route('settings'); // Вернёт: /user/settings
// В шаблонах
<a href="{{ route('settings') }}">Настройки</a>
PHP
Генерация URL с параметрами
Если маршрут содержит параметры, передайте их как массив:
// Определение маршрута с параметром
Route::get('/user/{id}/profile', $callback)->name('profile');
// Генерация URL с параметром
$url = route('profile', ['id' => 1]); // Результат: /user/1/profile
PHP
Дополнительные параметры в строке запроса
Дополнительные параметры автоматически добавляются в строку запроса:
$url = route('profile', [
'id' => 1, // Обязательный параметр маршрута
'images' => 'yes', // GET-параметр
'sort' => 'date' // GET-параметр
]);
// Результат: /user/1/profile?images=yes&sort=date
PHP
Переадресация на именованные маршруты
Для перенаправления на именованные маршруты используйте:
class MyController
{
public function __invoke()
{
// Обработка данных...
return redirect()->route('settings');
// или
return to_route('settings');
}
}
PHP
Проверка маршрута
Проверка существования маршрута
if (Route::has('settings')) {
// Маршрут существует
}
PHP
Проверка текущего маршрута
Вы можете проверить, соответствует ли текущий запрос определённому именованному маршруту:
// В middleware
class CheckAccessMiddleware
{
public function handle($request, Closure $next)
{
if ($request->route()->named('admin.*')) {
// Проверка прав для всех админских маршрутов
if (!auth()->user()->isAdmin()) {
abort(403);
}
}
return $next($request);
}
}
// В контроллере или любом другом месте
if (request()->route()->named('profile')) {
// Действия для маршрута профиля
}
PHP
Лучшие практики
- Используйте точечную нотацию для группировки связанных маршрутов:
Route::post('/posts/{id}')->name('posts.update');
PHP
- Проверяйте существование маршрута перед использованием
- Создавайте константы для имён маршрутов в больших проектах
class RouteNames
{
public const POSTS_INDEX = 'posts.index';
public const POSTS_SHOW = 'posts.show';
}
// Создание маршрута
Route::get('/posts')->name(RouteNames::POSTS_INDEX);
// Использование
return redirect()->route(RouteNames::POSTS_INDEX);
PHP