[版权声明] 本站内容采用 知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆 (CC BY-NC-SA 3.0 CN) 进行许可。
部分内容和资源来自网络,纯学习研究使用。如有侵犯您的权益,请及时联系我,我将尽快处理。
如转载请注明来自: Broly的博客,本文链接: Laravel5利用中间件修改请求参数
用得越多Laravel做开发,就会发现它越强大!
开发者可以非常灵活的解决各种实际开发中碰到的问题。
废话不多说,开始本文的正题:
首先说说我碰到的问题:
以前开发过一个功能,用了个插件,规定某个请求当中需要带参数auth_token,比如 http://blog.dreamlikes.cn/index.php?auth_token=xxx
一直用着相安无事,但是最近要重构这个项目,改用了另一个插件,但是这个插件规定必须使用参数token,比如 http://blog.dreamlikes.cn/index.php?token=xxx
此处博主表示汗...
按道理来讲,我在controller里面改这个参数也是可以的,但是问题就来了,这两个插件访问前都必须经过授权中间件,不然就访问不了。进不去controller,所以考虑其他方法来解决了。
后来想了想,去官方看了关于中间件的资料:《Route Groups》和《HTTP Middleware》,里面提到了:
To assign middleware to all routes within a group, you may use the
middleware
key in the group attribute array. Middleware will be executed in the order you define this array:
红字部分是重点,翻译:中间件将会按照数组中定义的顺序依次执行。
那么思路就清晰了,我自己定义一个中间件放在授权中间件之前,然后在这个中间件里面改变参数即可!
步骤一:新建中间件
进入终端输入
1 |
php artisan make:middleware PreAuth |
然后在 app/Http/Middleware 目录下找到 PreAuth.php ,并编辑为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php namespace App\Http\Middleware; use Closure; class PreAuth { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { // 替换参数,并销毁原参数 $request->offsetSet('token', $request->input('auth_token')); $request->offsetUnset('auth_token'); return $next($request); } } |
步骤二:Kernel.php中增加中间件配置
编辑文件 app/Http/Kernel.php ,在$routeMiddleware数组中添加刚刚的中间件:
1 2 3 4 |
protected $routeMiddleware = [ // ... 'pre.auth' => \App\Http\Middleware\PreAuth::class, ]; |
步骤三:路由中增加中间件配置
1 2 3 |
Route::group(['middleware' => ['pre.auth', 'auth']], function() { Route::controller("home", "HomeController"); }); |
大功告成。