Условия, при котором URL будет доступен
В файле routes/web.php при указании URL, через метод where()
можно указать условия, при котором URL будет доступен. Условия указываются через регулярные выражения.
// в {id} могут быть только числа Route::get('news/{id}', [NewsController::class, 'show'])->whereNumber('id'); Route::get('news/{id}', [NewsController::class, 'show'])->where('id', '\d+'); // в {id} могут быть только латинские буквы Route::get('news/{id}', [NewsController::class, 'show'])->whereAlpha('id'); Route::get('news/{id}', [NewsController::class, 'show'])->where('id', '[a-z]+'); // в {id} могут быть только числа или латинские буквы Route::get('news/{id}', [NewsController::class, 'show'])->whereAlphaNumeric('id'); Route::get('news/{id}', [NewsController::class, 'show'])->where('id', '[\da-z]+'); // одно из указанных значений, например «ru» или «en» Route::get('{lang}/news', [NewsController::class, 'index'])->where('lang', 'ru|en'); Route::get('{lang}/news', [NewsController::class, 'index'])->whereIn('id', ['ru', 'en']);
Регулярное выражение \d
разрешает использовать только числа, а знак +
означает, что числа могут быть указаны в любом количестве.
Условие по умолчанию
Чтобы, например, не указывать для каждого параметра {id} условие where()
, в файле app/Providers/RouteServiceProvider.php можно указать условие по умолчанию.
# app/Providers/RouteServiceProvider.php class RouteServiceProvider extends ServiceProvider { public function boot() { // в URL для параметра {id} можно указывать только числа Route::pattern('id', '\d+'); // указывается в версии Laravel 8 и ниже parent::boot(); } }
Поддержать автора