Насколько я понимаю, в Laravel 5.3 фильтры маршрутов устарели в пользу промежуточного программного обеспечения. Это обсуждается здесь.

Я пытаюсь сделать что-то подобное, но вместо определения шаблона маршрута я хочу определить «фильтр», в котором я проверяю зарегистрированного пользователя на наличие определенного условия и перенаправляю пользователя, если это условие не выполняется. Я хочу, чтобы этот фильтр применялся к приложению глобально.

Как я могу это сделать? Я вижу документацию только для метода Route :: pattern, но Route :: filter не существует.

1
asolberg 17 Дек 2016 в 08:10

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

Надеюсь это поможет!

2
Saumya Rastogi 17 Дек 2016 в 08:44
Спасибо! Цените помощь
 – 
asolberg
17 Дек 2016 в 08:41
Рад узнать, что это вам помогло. Спасибо!
 – 
Saumya Rastogi
17 Дек 2016 в 08:41