Насколько я понимаю, в Laravel 5.3 фильтры маршрутов устарели в пользу промежуточного программного обеспечения. Это обсуждается здесь.
Я пытаюсь сделать что-то подобное, но вместо определения шаблона маршрута я хочу определить «фильтр», в котором я проверяю зарегистрированного пользователя на наличие определенного условия и перенаправляю пользователя, если это условие не выполняется. Я хочу, чтобы этот фильтр применялся к приложению глобально.
Как я могу это сделать? Я вижу документацию только для метода Route :: pattern, но Route :: filter не существует.
1 ответ
Вы можете использовать промежуточное ПО Laravel следующим образом:
Чтобы создать новое промежуточное программное обеспечение, используйте команду make: middleware Artisan:
php artisan make:middleware CheckUserAge
И ваш класс CheckUserAge.php
должен выглядеть так:
<?php
namespace App\Http\Middleware;
use Closure;
class CheckUserAge
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (auth()->user->age <= 20) {
return redirect('home');
}
return $next($request);
}
}
Если вы хотите, чтобы промежуточное ПО запускалось во время каждого HTTP-запроса к вашему приложению, просто укажите класс промежуточного ПО в свойстве $middleware
вашего класса app/Http/Kernel.php
.
// Within App\Http\Kernel Class...
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
// insert your middleware here <--------------
'checkUserAge' => \App\Http\Middleware\CheckUserAge::class,
];
По умолчанию группа промежуточного программного обеспечения Интернета автоматически применяется к вашему файлу
routes/web.php
с помощьюRouteServiceProvider
.
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\CheckUserAge::class, // <------- add here too
],
];
Подробнее о промежуточном программном обеспечении в Laravel
Надеюсь это поможет!
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.