Как запустить ограничения маршрута Laravel перед промежуточным программным обеспечением? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть что-то вроде этого / permissions / {uuid} И у меня есть ограничение маршрута и промежуточное программное обеспечение.

Правило ограничения: Добавьте поставщика услуг маршрутизации для всех примененных маршрутов.

Route::pattern('uuid', '[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}');

Правило промежуточного программного обеспечения:

public function handle($request, Closure $next)
{
    $uuid = $request->route('uuid');

    // Check the uuid in DB and throw an exception

    return $next($request);
}

Но проблема здесь заключалась в том, что промежуточное программное обеспечение запускалось первым.Я просто хочу избежать вызова db, если uuid не был правильным форматом.Можем ли мы сначала запустить правило ограничений.

Редактировать: Кажется, что-то не так с глобальным ограничением, когда я использую в трассе трассы его работоспособность.

1 Ответ

0 голосов
/ 01 февраля 2019

Когда Laravel получает запрос, он сначала направляет его через глобальное промежуточное ПО, а затем пытается найти маршрут, соответствующий запросу.Если он найдет соответствующий маршрут, он запустит любое промежуточное ПО, указанное для него в файле маршрутов, конструкторе контроллера и т. Д., Разрешит любые параметры метода для маршрута и затем выполнит метод.Если он не найдет подходящий маршрут, он будет всего лишь 404.

Route::pattern(...) по существу добавляет глобальное предложение where для этого параметра.

Итак, в вашем случае, если у вас естьRoute с параметром {uuid} будет сопоставляться только в том случае, если часть uuid URI соответствует шаблону, предоставленному Route::pattern.Поэтому, если вы попытаетесь перейти к URL-адресу с чем-то, что не в правильном формате, он не будет соответствовать запросу к этому маршруту и ​​приведет к 404 (если у вас нет запасного или другого маршрута, который будет соответствовать).


Пример:

Route::pattern('uuid', '[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}');
Route::get('test/{uuid}', 'SomeController@method');

Это будет проходить:

example.com/test/cfb81fde-9ce6-4a5e-8ddc-38417ef5425c

Это приведет к 404:

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