laravel系列5-- 中间件
2015-12-29 10:59
656 查看
引言
中间件使得过滤请求变得更加方便,例如在laravel中有认证中间件可以帮助判断用户认证情况,所有的中间件都在app/Http/Middleware文件夹下。
定义中间件
生成新的中间件使用Artisan指令完成,代码如下
php artisan make:middleware OldMiddleware
该指令在
app/Http/Middleware文件夹生成一个新的
OldMiddleware类,该类实现了当
age>200时,允许路由通过,否则重定向到
home。代码如下
<?php namespace App\Http\Middleware; use Closure; class OldMiddleware { /** * Run the request filter. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if ($request->input('age') < 200) { return redirect('home'); } return $next($request); } }
可以将中间件视作是过滤请求的层,只有满足要求的请求才能通过。
中间件执行顺序
一个中间件是在请求之前执行还是在请求之后执行取决于中间件自身。下面的中间件将会在请求之前进行处理。
<?php namespace App\Http\Middleware; use Closure; class BeforeMiddleware implements Middleware { public function handle($request, Closure $next) { // Perform action return $next($request); } }
下面的代码将会在请求之后处理
<?php namespace App\Http\Middleware; use Closure; class AfterMiddleware implements Middleware { public function handle($request, Closure $next) { $response = $next($request); // Perform action return $response; } }
注册中间件
全局中间件只需要在
app/Http/Kernel.php中的
$middleware中写入中间件类的名字即可。
匹配中间件和路由
首先需要在
app/Http/Kernel.php为中间件起一个名字,通常
$routeMiddleware属性定义了所有的内置中间件,只需在最后添加自己的中间件类即可,并且给定一个名称。之后可以在路由中使用已经定义的名字,示例代码如下
Route::get('admin/profile', ['middleware' => 'auth', function() { // }]);
最后处理的中间件
有时中间件需要在请求完成之后进行,例如日志中间件和ssesion中间件,这时需要定义为terminable中间件,代码如下
use Closure; use Illuminate\Contracts\Routing\TerminableMiddleware; class StartSession implements TerminableMiddleware { public function handle($request, Closure $next) { return $next($request); } public function terminate($request, $response) { // Store the session data... } }
相关文章推荐
- PHP输出缓存ob系列函数详解
- FTP基础知识 FTP port(主动模式) pasv(被动模式) 及如何映射FTP
- FTP基础知识 FTP port(主动模式) pasv(被动模式) 及如何映射FTP
- php框架选择
- phpmyadmin mysql下面建立字段时的各个属性
- 转载]php读取图片成二进制流输出
- 在上海的PHP学习之旅
- Thinkphp的import使用方法
- PHP脚本的执行与加速原理
- laravel系列4-- 路由
- 使用phpstorm和xdebug实现远程调试的方法
- Jenkins+ftp 使用过程
- PHP远程调试之XDEBUG
- YII2.0 secruity
- 从性能方面考虑PHP下载远程文件的3种方法
- PHP7优化提高性能的几个Tips
- PHP RSA加密解密连接java
- ThinkPHP的CMIU
- 编写testplan
- 发布阿里云OSS for phpcmsV9整合教程