Laravel中间件

中间件为过滤进入应用的HTTP请求提供了一套便利的机制,例如Laravel内置了1个中间件来验证用户是否经过认证,如果用户没有经过认证,中间件会将用户重定向到登录页面。而如果用户已经经过认证,中间件就会允许请求继续往前进入下一步操作。
当然,除了认证之外,中间件还可以被用来处理很多其他任务。比如,日志中间件可以记录所有进入站点的请求,从而方便我们构建系统日志系统。

定义中间件

要创建1个新的日志中间件,可以通过Artisian命令:

  
php artisan make:middleware CheckToken  

这个命令会在app/Http/Middleware目录下创建1个新的中间件类CheckToken,在这个中间件中,我们只允许提供的token等于指定值的请求访问路由,否则进行对应的输出操作:

<?php  

namespace App\Http\Middleware;  

use Closure;  

class CheckToken  
{  
    /**  
     * Handle an incoming request.  
     *  
     * @param  \Illuminate\Http\Request  $request  
     * @param  \Closure  $next  
     * @return mixed  
     */  
    public function handle($request, Closure $next)  
    {  
        if($request->input('token')!='localhost'){  
            //return redirect()->to('http://www.baidu.com');  
            return response('Hello');  
        }  
        return $next($request);  
    }  
}  
?>

理解中间件最好方式是将中间件看做HTTP请求到达目标动作之前必须经过的层,每一层都会检查请求并且可以完全拒绝它。
1个中间件是请求前还是请求后执行,取决于中间件本身。我们可以在return之前进行一些动作的处理。

注册中间件

中间件分3类,分别是全局中间件、中间件组合指定路由中间件。

全局中间件

如果你想定义的中间件在每1个HTTP请求时都被执行,只需要将相应的中间件类添加到app/Http/Kernel.php的数组属性$middleware中即可。

...  
\App\Http\Middleware\CheckToken::class,

除非真的需要,否则我们一般不会把业务级别的中间件放到全局中间件中。

分配中间件到指定路由

如果你想要分配中间件到指定路由,首先应该在app/Http/Kernel.php文件中给该中间件1个key,并在$routeMiddleware属性中进行指定。

'token'=> \App\Http\Middleware\CheckToken::class,

中间件被定义之后,可以使用middleware方法将其分配到路由:

Route::get('/', function () {  
    //  
})->middleware('token');

中间件组

有时候你可能想通过指定1个键名的方式将相关中间件分到同一个组里面,这样可以更方便地将其分配到路由中。此时可以使用Kernel提供的$middlewareGroups属性实现。

参考文章:

https://laravelacademy.org/post/8739.html

若文章对您有帮助,请打赏1块钱。您的支持,可以让我分享更多精彩的文章。转载请注明来源


知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。