Laravel маршрут, когда условие ложно - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть следующий код:

Route::get('/{lang}/user/sort-by-{class}', function ($lang,$class) {
        return view('users.list',compact("lang","class"));
})->where('class', '[a-z]+');

Route::get('/{lang}/user/{user}', function ($lang,$user) {
        return view('users.user',compact("lang","user"));
});

Когда условие в где ложно, как я могу отправить его непосредственно на 404, когда сортировка - это, например, число? Проблема в том, что он переходит на дополнительный маршрут как пользователь.

Например:

/ en / user / sort-by-name в порядке

/ en / user / sort-by-4446 должен показывать страницу 404

Я знаю, что я могу сделать другой маршрут только между ними с

Route::get('/{lang}/user/sort-by-{class}', function ($lang,$class) {
        return \Response::view('errors.404',array(),404);
})->where('class', '.*');

, но это кажется уродливым, я хотел бы в то же самое предложение

1 Ответ

0 голосов
/ 17 апреля 2020

По сути, вы можете сделать это

Route::get('/{lang}/user/sort-by-{class}', function ($lang,$class) {
    if (is_numeric($class)) {
        abort(404, 'Your reason');
    }
    return view('heros.list',compact("lang","class"));
});

Хотя использование замыканий в маршрутах является плохой практикой, поскольку их нельзя сериализовать в рабочем режиме. Вот почему вы должны использовать контроллер, чтобы вернуть свое представление, и назначить промежуточное программное обеспечение для этого маршрута, который проверит ваш class и прервет запрос, если необходимо.

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