Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何编写全局路由过滤器中间件来重定向用户?_Php_Laravel_Laravel 5 - Fatal编程技术网

Php 如何编写全局路由过滤器中间件来重定向用户?

Php 如何编写全局路由过滤器中间件来重定向用户?,php,laravel,laravel-5,Php,Laravel,Laravel 5,据我所知,在Laravel5.3中,他们已经弃用了路由过滤器,转而使用中间件。对此进行了讨论 我试图做一些类似的事情,但不是定义一个路由模式,而是要定义一个“过滤器”,在这里我检查登录用户的特定条件,如果不满足此条件,则重定向用户。我希望此筛选器全局应用于应用程序 我该怎么做?我只看到Route::pattern方法的文档,但Route::filter不存在。您可以像这样使用Laravel中间件: <?php namespace App\Http\Middleware; use Clo

据我所知,在Laravel5.3中,他们已经弃用了路由过滤器,转而使用中间件。对此进行了讨论

我试图做一些类似的事情,但不是定义一个路由模式,而是要定义一个“过滤器”,在这里我检查登录用户的特定条件,如果不满足此条件,则重定向用户。我希望此筛选器全局应用于应用程序


我该怎么做?我只看到Route::pattern方法的文档,但Route::filter不存在。

您可以像这样使用Laravel中间件:

<?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);
  }

}
要创建新的中间件,请使用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);
  }

}
现成的web中间件组由
RouteServiceProvider
自动应用于
routes/web.php
文件

受保护的$middlewareGroups=[
“网络”=>[
\App\Http\Middleware\EncryptCookies::class,
\Illumb\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illumb\Session\Middleware\StartSession::class,
\照亮\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illumb\Routing\Middleware\SubstituteBindings::class,

\App\Http\Middleware\CheckUserAge::class,//谢谢!感谢您的帮助很高兴知道它帮助了您。谢谢!
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
  ],
];