Совет дня.
В маршруте вы можете указать
Route::get(‘projects/{project_id}’, ‘ProjectController@show’);
А если нужно, чтобы project_id был строго целым числом?
Для этого нужно поместить в Route условие where() и использовать регулярное выражение с указанием нужного шаблона.
Примеры из официальной документации Laravel
// Только буквы 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/{user_id}/{approve_action}','UserController@approve') ->where('approve_action', 'approve|decline');
Если вы укажете эти условия, то маршрут будет соответствовать, только тем, что находятся в регулярке, поэтому, если вы введете адрес просто /user/123, то отобразится страница 404.
Более того, вы можете указать, что имя определенной переменной всегда должно соответствовать определенному шаблону. Например нужно, чтобы project_id всегда был целым числом. Делаем в app/Providers/RouteServiceProvider.php:
public function boot() { Route::pattern('project_id', '[0-9]+'); parent::boot(); }
Автор: Povilas Korop
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.