Как использовать -> условие where () для параметров маршрута в Laravel - PullRequest
0 голосов
/ 24 октября 2018

Я изменил параметр Route по умолчанию в 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 Метод Illuminate \ Routing \ PendingResourceRegistration ::, где не существует.

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Наконец, я нашел решение в одной строке кода, , чтобы установить регулярное выражение для параметра / параметров, просто перейдите к 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']);

0 голосов
/ 24 октября 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...