Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pplrPmRtRC 23 of 252 menu
◀ ▶

Разрешение конфликтов маршрутов в Laravel

Laravel проверяет маршруты по порядку их записи. Если найден подходящий маршрут, то дальнейшая проверка прекращается.

Из-за этого маршруты могут конфликтовать друг с другом. Например, в следующем примере второй маршрут никогда не будет достигнут, так обращение к нему будет перехвачено первым маршрутом:

<?php Route::get('/post/{id}', function ($id) { return 'id'; }); Route::get('/post/all', function () { return 'all'; }); ?>

Для избежания конфликтов следует писать более частные случаи маршрутов вначале, а потом - более общие. Поменяем порядок следования наших маршрутов и проблема исчезнет:

<?php Route::get('/post/all', function () { return 'all'; }); Route::get('/post/{id}', function ($id) { return 'id'; }); ?>

Можно также наложить ограничение на параметры. В этом случае причина конфликта исчезнет. Давайте укажем, что наши id должны быть числами. В этом случае второй маршрут уже не будет частным случаем первого и все будет работать верно:

<?php Route::get('/post/{id}', function ($id) { return 'id'; })->whereNumber('id'); Route::get('/post/all', function () { return 'all'; }); ?>

Разрулите конфликт маршрутов:

<?php Route::get('/user/{id}', function ($id) { return 'id'; }); Route::get('/user/all', function () { return 'all'; }); ?>

Разрулите конфликт маршрутов:

<?php Route::get('/page/{num}', function ($num) { return 'num'; }); Route::get('/page/about', function () { return 'about'; }); Route::get('/page', function () { return 'page'; }); ?>

Разрулите конфликт маршрутов:

<?php Route::get('/user/{id?}', function ($id = null) { return 'id'; }); Route::get('/user', function () { return 'user'; }); Route::get('/user/all', function () { return 'all'; }); ?>

Разрулите конфликт маршрутов:

<?php Route::get('/user/{name}/{id?}', function ($name, $id = null) { return 'name id'; }); Route::get('/user/all', function () { return 'all'; }); Route::get('/user/all/desc', function () { return 'all desc'; }); ?>
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить