Передача параметров в маршруты

Обязательные параметры

Обязательные параметры передаются в фигурных скобках {}, их названия могут состоять только из букв и символа нижнего подчеркивания.

Route::get('/user/{id}', function ($id) {
    return 'User '.$id;
});

В маршруте может передаваться несколько параметров.

Route::get('/posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});

Необязательные параметры

Необязательрные параметры передаются с помощью знака вопроса. Также необходимо указать значение по умолчанию.

Route::get('/user/{name?}', function ($name = null) {
    return $name;
});

Route::get('/user/{name?}', function ($name = 'John') {
    return $name;
});

Регулярные выражения

Если необходимо ограничить передаваемые параметры с помощью регулярного выражения, можно использовать метод where

Route::get('/user/{name}', function ($name) {
    //
})->where('name', '[A-Za-z]+');

Route::get('/user/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

Route::get('/user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

Для самых распостранненных регулярных выражений существуют готовые помощники:

Route::get('/user/{id}/{name}', function ($id, $name) {
    //
})->whereNumber('id')->whereAlpha('name');

Route::get('/user/{name}', function ($name) {
    //
})->whereAlphaNumeric('name');

Route::get('/user/{id}', function ($id) {
    //
})->whereUuid('id');

Также регулярные выражения можно задавать глобально, в классе App\Providers\RouteServiceProvider:

public function boot()
{
    Route::pattern('id', '[0-9]+');
}

Имена маршрутов

Каждому маршруту может быть присвоено имя с помощью метода name.

Route::get('/user/profile', function () {
    //
})->name('profile');
Route::get(
    '/user/profile',
    [UserProfileController::class, 'show']
)->name('profile');

Имена маршрутов должны быть уникальными

Имена маршрутов можно использовать для создания ссылок на страницы:

$url = route('profile');

В маршрут с именем можно передавать параметры

Route::get('/user/{id}/profile', function ($id) {
    //
})->name('profile');

$url = route('profile', ['id' => 1]);

Если параметры передаются в виде массива, пары ключ/значения автоматически добавляются к запросу:

Route::get('/user/{id}/profile', function ($id) {
    //
})->name('profile');

$url = route('profile', ['id' => 1, 'photos' => 'yes']);

// /user/1/profile?photos=yes