Совет дня.
В маршруте вы можете указать
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
Перевод: Demiurge Ash