Laravel学习日记3:路由中间件
来源:互联网 发布:远程网络打印机 编辑:程序博客网 时间:2024/06/08 07:06
Laravel框架里的中间件到底起一种什么作用?在我看来,最主要的功能就是一个框架防火墙的作用:在请求进入到框架内部实际逻辑之前,先对请求做一次或多次检测过滤,如果请求满足了过滤的条件,才会被允许进入到内部实际逻辑。
Laravel中间件可以通过两种方式来创建,一种方式是通过框架自带的“artisan”辅助指令,另一种方式是自己来创建一个新文件,相对而言,使用“artisan”来创建更加便捷与可靠一些。
通过artisan创建一个名为CheckAge的中间件
[root@vm Middleware]# lsEncryptCookies.php RedirectIfAuthenticated.php TrimStrings.php TrustProxies.php VerifyCsrfToken.php[root@vm Middleware]# /usr/local/bin/php /var/www/blog/artisan make:middleware CheckAgeMiddleware created successfully.[root@vm Middleware]# lsCheckAge.php EncryptCookies.php RedirectIfAuthenticated.php TrimStrings.php TrustProxies.php VerifyCsrfToken.php
通过执行php artisan make:middleware CheckAge
,就可以在app/Http/Middleware/下自动创建一个名为CheckAge.php的中间件文件了。
可以看一下通过artisan创建的中间件文件的内容:
<?phpnamespace App\Http\Middleware;use Closure;class CheckAge{ /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { return $next($request); }}
这个就是通过artisan创建出的CheckAge.php文件的原始内容了。
相对于自己手动创建的文件,通过artisan辅助指令来创建的文件,最基本的命名空间、引用和文件内容等都已经自动完成了,节省了很多时间,也更加可靠一些,毕竟程序不会出现输入错误这种情况,我们可以在这个基本的文件内容中添加需要的逻辑处理。
handle方法中的$request
表示的是http请求,而Closure $next
则表示继续执行请求的下一步操作。所以这个handle方法实现的功能就是“继续执行请求的下一步操作”,这是因为此handle方法中没有相关处理逻辑的原因,所以直接返回了继续下一步操作的指令。
我们在handle方法中添加一个处理逻辑:请求参数中的age参数必须大于100,才可以继续下一步请求,否则,就跳转到users路由上。
如此,handle方法就变成了如下形式:
public function handle($request, Closure $next) { if($request->age <= 100){ return redirect('users'); } return $next($request); }
handle方法修改完成后,还需要在routes/web.php中添加一条路由,以方便进行测试:
Route::get('/mid/{age}', 'UserController@age')->middleware('age');
添加的这条路由中指定了处理的中间件是’age’。
因为指定了由UserController下的age方法来进行处理,所以需要在UserController下新增一个age方法:
public function age(){ return "Hello,Age.....";}
但现在如果直接调用的话,是找不到的这个中间件的,因为我们还没有注册这个中间件。
修改app\Http\Kernel.php文件,在其中的$routeMiddleware
中添加我们新建的CheckAge中间件,注册为age:
'age'=> \App\Http\Middleware\CheckAge::class,
现在可以进行调试了。
当使用“http://ip:port/mid/22”来进行请求的时候,会发现实际浏览器中的实际url已经指向了“http://ip:port/users”,显示的也是路由users指向的页面内容。
当使用“http://ip:port/mid/222”来进行请求的时候,会发现浏览器正确指向了“/mid/{age}”路由指向的UserController@age方法,显示的正是age方法中的输出。
以上两种请求的方式,正是因为设置的CheckAge中间件的处理逻辑,导致的最后页面展示的不同。而这,也正是Laravel中间件主要的作用所在。
明白了中间件的作用与具体实现之后,其它的中间件组、全局中间件等也就好理解了,此些不再赘述。
- Laravel学习日记3:路由中间件
- Laravel学习日记2:路由
- laravel 5.2路由学习web中间件back()的问题
- laravel 学习笔记——路由(中间件与路由组)
- Laravel 学习笔记——路由(中间件与路由组)
- laravel 学习笔记——路由(中间件与路由组)
- laravel路由、中间件、控制器等简单笔记
- laravel 路由组 中添加中间件
- Laravel ——路由(中间件与路由组)
- Laravel学习笔记(二)---路由,CSRF,HTTP中间件,RESTFul风格控制器注册路由,视图间共享数据
- Laravel框架学习(中间件)
- (学习笔记) Laravel 中间件
- Laravel 5如何在中间件中获取路由参数?
- laravel框架学习-配置,路由
- laravel框架学习(路由)
- 1.Laravel学习点滴-路由
- Laravel 学习路线【2】路由
- Laravel-学习笔记-路由(Route)
- 对称密码体制
- spring事务隔离、传播
- intelliJ idea 中访问页面报500错Run/debug configuration deployment配置问题
- Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、
- jsp session 管理
- Laravel学习日记3:路由中间件
- 从现象出发:CNN中使用的领域知识
- Spring Mvc response返回中文字符串出现乱码
- 三维模型另存DWG如何设置DWG版本
- oralce 索引命名规范
- 开发自己的光电吊舱
- oracle查看被锁的表和解锁
- codeforces 49a
- mysql统计用户每天请求次数,5分钟内同一个用户请求算一次