Метод whereAlphaNumeric
Метод whereAlphaNumeric применяется к экземпляру маршрута
и позволяет задать ограничение для одного или нескольких
параметров в URI. В качестве аргумента передаётся ассоциативный
массив, где ключом является имя параметра, а значением может
быть строка с именем ограничения 'alpha-numeric' или
регулярное выражение. Если используется строка 'alpha-numeric',
то Laravel автоматически подставляет регулярное выражение
^[a-zA-Z0-9]+$. Метод возвращает тот же объект маршрута,
что позволяет использовать его в цепочках вызовов.
Синтаксис
<?php
Route::get($uri, $action)->whereAlphaNumeric($parameters);
?>
Пример
Давайте создадим маршрут для профиля пользователя,
где параметр 'id' должен содержать только буквы и цифры:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
Route::get('/user/{id}', [UserController::class, 'show'])
->whereAlphaNumeric('id');
?>
Теперь маршрут сработает для запросов вида:
/user/123
/user/abc
/user/abc123
И вернёт ошибку 404 для запросов, содержащих спецсимволы:
/user/abc-123
/user/abc_123
/user/abc.123
Пример
Ограничим несколько параметров маршрута одновременно:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;
Route::get('/posts/{category}/{slug}', [PostController::class, 'show'])
->whereAlphaNumeric([
'category' => 'alpha-numeric',
'slug' => 'alpha-numeric'
]);
?>
Примеры корректных запросов:
/posts/news/article123
/posts/tech/Laravel8
Примеры некорректных запросов:
/posts/news/article-123
/posts/tech/Laravel_8
Пример
Метод whereAlphaNumeric можно комбинировать с другими
ограничениями, например с whereNumber для разных параметров:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;
Route::get('/product/{category}/{id}', [ProductController::class, 'show'])
->whereAlphaNumeric('category')
->whereNumber('id');
?>
Теперь параметр 'category' принимает только буквы и цифры,
а параметр 'id' - только числа:
/product/electronics/42
/product/gadgets/100
При этом запрос /product/electronics/abc вернёт ошибку 404,
так как 'id' не является числом.
Смотрите также
-
метод
where,
который позволяет задать произвольное регулярное выражение для параметров -
метод
whereNumber,
который ограничивает параметр только цифрами -
метод
whereAlpha,
который ограничивает параметр только буквами -
метод
whereUuid,
который проверяет параметр на соответствие формату UUID