Laravel ограничить параметр значением из базы данных - PullRequest
0 голосов
/ 04 августа 2020

Гипотетически, представьте себе этот надуманный маршрут в приложении Laravel 7.x:

Route::get('/profile/{username}', function ($username) {
    /* code here */
})->name('profile.username');

Моя цель - единственные разрешенные значения {username}, которые поступают из базы данных. Предположим, есть таблица users со столбцами name и level, и только те имена пользователей с level из >5 должны показывать, что этот маршрут может выполняться. В противном случае мы получим HTTP 404. Есть ли в Laravel специальный c способ заставить это работать?

1 Ответ

2 голосов
/ 04 августа 2020

Это отличный кандидат для явного связывания модели маршрута; в зависимости от того, как вы хотите это настроить.

В документации рассказывается, как это сделать; https://laravel.com/docs/7.x/routing#route -model-binding .

В качестве альтернативы может работать промежуточное ПО - EnsureUsernameExists:

public function handle($request, Closure $next)
{
    $username = $this->route('username');
    User::where('username', $username)->where('level', '>', 5)->firstOrFail();
   
    // Or with abort
   abort_unless(User::where('username', $username)->where('level', '>', 5)->exists(), 404);
}

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

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