Метод whereIn
Метод whereIn класса Route применяется к определению маршрута для ограничения допустимых значений параметра. Он принимает два параметра: первый - имя параметра в маршруте, второй - массив допустимых значений. Если переданное значение не совпадает ни с одним из элементов массива, маршрут не будет совпадать с запросом.
Синтаксис
<?php
Route::get($uri, $action)->whereIn($param, $values);
?>
Первым параметром передаётся имя параметра маршрута, вторым - массив допустимых значений.
Пример
Давайте создадим маршрут для отображения страниц пользователей, который будет принимать только определённые статусы:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/user/{status}', function ($status) {
return "User status: " . $status;
})->whereIn('status', ['active', 'inactive', 'pending']);
?>
Теперь маршрут будет совпадать только для значений 'active', 'inactive' или 'pending':
"/user/active" // совпадение
"/user/inactive" // совпадение
"/user/pending" // совпадение
"/user/guest" // не совпадёт
Пример
Давайте отфильтруем маршрут по ID пользователя, разрешив только определённые числовые значения:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/profile/{id}', function ($id) {
return "Profile ID: " . $id;
})->whereIn('id', [1, 5, 10, 15]);
?>
Теперь запросы к следующим адресам будут обработаны:
"/profile/1" // совпадёт
"/profile/5" // совпадёт
"/profile/10" // совпадёт
"/profile/15" // совпадёт
"/profile/20" // не совпадёт
Пример
Давайте создадим маршрут для управления категориями, который принимает только допустимые значения категорий:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/category/{slug}', function ($slug) {
return "Category: " . $slug;
})->whereIn('slug', ['news', 'blog', 'tutorials']);
?>
Примеры запросов:
"/category/news" // совпадёт
"/category/blog" // совпадёт
"/category/tutorials" // совпадёт
"/category/videos" // не совпадёт
Пример
Давайте воспользуемся методом whereIn в группе маршрутов для применения ограничения ко всем маршрутам группы:
<?php
use Illuminate\Support\Facades\Route;
Route::prefix('admin')->group(function () {
Route::get('/user/{role}', function ($role) {
return "User role: " . $role;
})->whereIn('role', ['admin', 'editor', 'moderator']);
Route::get('/post/{type}', function ($type) {
return "Post type: " . $type;
})->whereIn('type', ['article', 'news', 'review']);
});
?>
Теперь все маршруты в группе используют валидацию параметров через whereIn:
"/admin/user/admin" // совпадёт
"/admin/user/guest" // не совпадёт
"/admin/post/article" // совпадёт
"/admin/post/comment" // не совпадёт
Смотрите также
-
метод
where,
который ограничивает параметр маршрута регулярным выражением -
метод
whereNumber,
который ограничивает параметр только числовыми значениями -
метод
whereAlpha,
который ограничивает параметр только буквенными символами -
метод
whereAlphaNumeric,
который ограничивает параметр буквенно-цифровыми символами