2016-12-17 57 views
0

我在Laravel 5.3中了解到,他们已经弃用Route Filters来支持中间件。这是讨论here如何编写全局路由过滤器中间件来重定向用户?

我想要做类似的事情,但不是定义路由模式我想定义一个“过滤器”,我检查登录用户的某种条件,并重定向用户,如果这种情况不满足。我希望将此过滤器全面应用于该应用。

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

回答

0

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

要创建一个新的中间件,使用make:中间件工匠命令:

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, 
]; 

开箱时,Web中间件组会自动由RouteServiceProvider应用到您的routes/web.php文件。

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 
    ], 
]; 

查看更多有关Middlewares in Laravel

希望这有助于!

+0

谢谢!欣赏帮助 – asolberg

+0

很高兴知道它对你有所帮助。谢谢! –

相关问题