Параметры маршрутов

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

Для получения сегмента из URI маршрута, вы можете определить параметр. Например, получить ID пользователя из URL:

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

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

Route::get('/user/{user_id}/posts/{post_id}', function ($user_id, $post_id) {
    // ...
});
PHP

Параметры маршрута всегда заключены в фигурные скобки {}, и могут состоять из символов латинского алфавита и знака подчеркивания _. Параметры маршрута будут автоматически внедрены в callback в порядке их объявлений.

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

Иногда может потребоваться указать параметр маршрута, который не всегда будет присутствовать в URI. Добавьте после имени параметра знак ?. Не забудьте назначить значение по умолчанию для переменной параметра:

Route::get('/docs/{section?}/{page?}', function ($section = 'main', $page = 'index') {
    return $page;
});
PHP

Параметры и внедрение зависимостей

Если в маршрут необходимо внедрить зависимости в callback функцию маршрута, укажите эти зависимости перед параметрами маршрута:

use Imhotep\Http\Request;

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

Проверка регулярными выражениями

Вы можете ограничить формат параметров маршрута используя метод where экземпляра Route. Данный метод принимает имя параметра и регулярное выражение для проверки параметра.

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

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

Для удобства, можно использовать готовые паттерны для проверки параметров маршрута:

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

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

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

Route::get('/category/{category}', function ($category) {
    // ...
})->whereIn('category', ['auto', 'work', 'hobby']);
PHP

Глобальные ограничения

Для удобства, можно создать глобальное ограничение параметра во всех маршрутах, используя метод pattern. Добавить эти ограничения можно в методе boot, сервис-провайдера App\Providers\RouteServiceProvider.

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

После регистрации ограничения, он автоматически будет использоваться во всех маршрутах использующие параметр с этим именем.

Route::get('/user/{id}', function ($id) {
    // Будет выполнен, только если {id} состоит из цифр
});
PHP

Кодирование слэшей

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

Route::get('/search/{search}', function ($search) {
    return $search;
})->where('search', '.*');
PHP

Поглощение слэшей / возможно только для последнего параметра маршрута.