Параметры роутов
Параметры позволяют передавать данные через URL. Они объявляются в фигурных скобках и попадают в аргументы обработчика.
Обязательный параметр
Route::get('/user/{id}', function (string $id) {
return "User ID: {$id}";
});
Если открыть /user/42, в $id попадёт 42.
Несколько параметров
Route::get('/posts/{post}/comments/{comment}', function ($postId, $commentId) {
return "Post {$postId}, Comment {$commentId}";
});
Порядок параметров в URL и в аргументах функции должен совпадать.
Необязательный параметр
Помечается ?. В функции должно быть значение по умолчанию:
Route::get('/user/{name?}', function (string $name = 'Guest') {
return "Hello, {$name}";
});
Если открыть /user — вернёт Hello, Guest. Если /user/Alice — Hello, Alice.
Ограничения через регулярные выражения
Метод where задаёт шаблон, которому должен соответствовать параметр:
Route::get('/user/{id}', function ($id) {
return $id;
})->where('id', '[0-9]+');
Если URL /user/abc — вернётся 404.
Несколько ограничений:
Route::get('/user/{id}/{slug}', function ($id, $slug) {
//
})->where(['id' => '[0-9]+', 'slug' => '[a-z-]+']);
Глобальные паттерны
Если один и тот же паттерн нужен везде, его можно задать глобально в AppServiceProvider:
use Illuminate\Support\Facades\Route;
public function boot(): void
{
Route::pattern('id', '[0-9]+');
}
Теперь любой {id} в любом роуте будет соответствовать только цифрам.
Именованные параметры
Имя параметра в URL и в аргументе должны совпадать. Laravel подставляет значения по имени, а не по порядку:
Route::get('/users/{userId}/posts/{postId}', function ($userId, $postId) {
//
});