Как использовать условие -> where () для параметров маршрута в Laravel

Я изменил параметр маршрута по умолчанию в Laravel 5.7 как

Route::resource('questions', 'QuestionController')->parameters(['questions' => 'question_slug']);

Но я сбит с толку, как я установил шаблон регулярного выражения для этого нового параметра, я хочу применить slug_regex к этому параметру, я пробовал это:

Route::resource('questions', 'QuestionController')->parameters(['questions' => 'question_slug'])->where(['slug' => '^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$']);

Но получаю эту ошибку:

BadMethodCallException Method Illuminate\Routing\PendingResourceRegistration::where does not exist.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
834
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Итак, Route - это не настоящий класс в Laravel, а на самом деле Фасад, который дает вам статический доступ к реальным классам.

Настоящий класс, к которому это дает вам доступ, - это Illuminate\Routing\Router. Если посмотреть на функцию resource() (это то, что вызывается при записи Route::resource()), мы видим, что она возвращает объект Illuminate\Routing\PendingResourceRegistration, а метод where() недоступен для этого класса.

Итак, как решить вашу проблему? Что ж, есть два способа: вы можете проверить, что slug действителен в ваших действиях controller, или вы можете создать middleware, поскольку к ресурсным маршрутам может быть подключен middleware.

Ответ принят как подходящий

Наконец, я нашел решение в одной строке кода, установить проверку регулярного выражения для параметра / параметров, просто перейдите к YourProjectName\app\Providers\RouteServiceProvider.php, где вы найдете метод с именем boot, он по умолчанию содержит этот код;

public function boot()
{
    //

    parent::boot();
}

Просто добавьте сюда свой параметр как;

Route::pattern('parameter', 'regex-rule-here');

Итак, ваш код будет таким:

public function boot()
{
    //

    Route::pattern('slug', '[\w\d\-\_]+');

    parent::boot();
}

Для получения дополнительных параметров просто передайте свои параметры в массиве как:

Route::pattern(['1st-para' => 'regex-rule-here', '2nd-para' => 'regex-rule-here']);

Другие вопросы по теме