我在Laravel 5.3中了解了他们对中间件的弃用过滤器。这是在这里讨论的。
我正在尝试做类似的事情,但是我不是要定义一个路由模式,而是要定义一个"过滤器",在该模式中,我检查了在某个条件的用户中记录的用户,并在不满足此情况的情况下重定向。我希望该过滤器全球应用于应用程序。
我该怎么做?我只看到路由::模式方法的文档,但是route :: filter不存在。
您可以使用这样的Laravel Middlewares:
要创建一个新的中间件,请使用Make:Minderware Artisan命令:
php artisan make:middleware CheckUserAge
,您的CheckUserAge.php
类应该看起来像:
<?php
namespace AppHttpMiddleware;
use Closure;
class CheckUserAge
{
/**
* Handle an incoming request.
*
* @param IlluminateHttpRequest $request
* @param Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (auth()->user->age <= 20) {
return redirect('home');
}
return $next($request);
}
}
如果您希望中间件在每个HTTP请求期间运行到您的应用程序,请在app/Http/Kernel.php
类的$middleware
属性中列出中间件类。
// Within AppHttpKernel Class...
protected $routeMiddleware = [
'auth' => IlluminateAuthMiddlewareAuthenticate::class,
'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
'bindings' => IlluminateRoutingMiddlewareSubstituteBindings::class,
'can' => IlluminateAuthMiddlewareAuthorize::class,
'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
'throttle' => IlluminateRoutingMiddlewareThrottleRequests::class,
// insert your middleware here <--------------
'checkUserAge' => AppHttpMiddlewareCheckUserAge::class,
];
开箱即用,Web中间件组由
RouteServiceProvider
自动应用于您的routes/web.php
文件。
protected $middlewareGroups = [
'web' => [
AppHttpMiddlewareEncryptCookies::class,
IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
IlluminateSessionMiddlewareStartSession::class,
IlluminateViewMiddlewareShareErrorsFromSession::class,
AppHttpMiddlewareVerifyCsrfToken::class,
IlluminateRoutingMiddlewareSubstituteBindings::class,
AppHttpMiddlewareCheckUserAge::class, // <------- add here too
],
];
查看有关Laravel中的中间Wares的更多信息
希望这会有所帮助!