Параметры маршрутов
Обязательные параметры
Для получения сегмента из URI маршрута, вы можете определить параметр. Например, получить ID пользователя из URL:
Route::get('/user/{id}', function ($id) {
return 'User '.$id;
});
Вы можете определить несколько обязательных параметров в маршруте:
Route::get('/user/{user_id}/posts/{post_id}', function ($user_id, $post_id) {
// ...
});
Параметры маршрута всегда заключены в фигурные скобки {}, и могут состоять из символов латинского алфавита и знака подчеркивания _. Параметры маршрута будут автоматически внедрены в callback в порядке их объявлений.
Необязательные параметры
Иногда может потребоваться указать параметр маршрута, который не всегда будет присутствовать в URI. Добавьте после имени параметра знак ?. Не забудьте назначить значение по умолчанию для переменной параметра:
Route::get('/docs/{section?}/{page?}', function ($section = 'main', $page = 'index') {
return $page;
});
Параметры и внедрение зависимостей
Если в маршрут необходимо внедрить зависимости в callback функцию маршрута, укажите эти зависимости перед параметрами маршрута:
use Imhotep\Http\Request;
Route::get('/user/{id}', function (Request $request, $id) {
return 'User '.$id;
});
Проверка регулярными выражениями
Вы можете ограничить формат параметров маршрута используя метод 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]+']);
Для удобства, можно использовать готовые паттерны для проверки параметров маршрута:
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']);
Глобальные ограничения
Для удобства, можно создать глобальное ограничение параметра во всех маршрутах, используя метод pattern. Добавить эти ограничения можно в методе boot, сервис-провайдера App\Providers\RouteServiceProvider.
public function boot()
{
Route::pattern('id', '[0-9]+');
}
После регистрации ограничения, он автоматически будет использоваться во всех маршрутах использующие параметр с этим именем.
Route::get('/user/{id}', function ($id) {
// Будет выполнен, только если {id} состоит из цифр
});
Кодирование слэшей
По умолчанию, параметры могут содержать любые символы кроме слэша /. Для их поглощения, необходимо использовать регулярное выражение where:
Route::get('/search/{search}', function ($search) {
return $search;
})->where('search', '.*');
Поглощение слэшей
/возможно только для последнего параметра маршрута.