Laravel5.1框架注册中间件的三种场景详解
本文实例讲述了Laravel5.1框架注册中间件的三种场景。分享给大家供大家参考,具体如下:
在Laravel中注册中间件主要有三种场景,一种给控制器中的方法进行注册,一种是给整个控制器进行注册,最后一种是给全局注册中间件。
- 1、在控制器中的方法中注册中间件
这种需求是最为常见,这个例子是给IndexController中的index方法添加中间件。
Route::get('/',['middleware'=>['App\Http\Middleware\EmailMiddleware'],'uses'=>'IndexController@index']);
- 2、在整个控制器中注册中间件
这种需求有的时候也会出现,如果给整个控制器中注册中间件,那么这个控制器中的所有方法都注册了该中间件。跟我一起来找到答案!
控制器基类(Controller.php)
首先来看一下控制器基类,可以看到Controller类继承了BaseController类,而BaseController的路径是Illuminate\Routing\Controller,然后我们来看看Laravel的源码。
BaseController类
从源码中我们可以看到有一个属性为middleware,这个middleware属性就是我们要找的,所以只要在需要注册的控制器下使用这个属性即可完成注册。
protected$middleware=[];middleware[]=[ 'middleware'=>$m, 'options'=>&$options, ]; } returnnewControllerMiddlewareOptions($options); } /** *Getthemiddlewareassignedtothecontroller. * *@returnarray */ publicfunctiongetMiddleware() { return$this->middleware; } /** *Executeanactiononthecontroller. * *@paramstring$method *@paramarray$parameters *@return\Symfony\Component\HttpFoundation\Response */ publicfunctioncallAction($method,$parameters) { returncall_user_func_array([$this,$method],$parameters); } /** *Handlecallstomissingmethodsonthecontroller. * *@paramarray$parameters *@returnmixed * *@throws\Symfony\Component\HttpKernel\Exception\NotFoundHttpException */ publicfunctionmissingMethod($parameters=[]) { thrownewNotFoundHttpException('Controllermethodnotfound.'); } /** *Handlecallstomissingmethodsonthecontroller. * *@paramstring$method *@paramarray$parameters *@returnmixed * *@throws\BadMethodCallException */ publicfunction__call($method,$parameters) { thrownewBadMethodCallException("Method[{$method}]doesnotexist."); }给整个控制器注册中间件
我们选用系统的Authenticate中间件来举例,这个中间件是用于检测用户是否登录。
注意:中间件的名称为键,值可以是一个空数组
protected$middleware=['\App\Http\Middleware\Authenticate'=>[]];
- 3、全局注册中间件
打开app/Http/Kernel.php,这是一个内核文件,可以看到一个属性$middleware,我们只需要将我们自定义的中间件的路径添加到这个$middleware这个属性中即可。
此外还有一个$routeMiddleware属性,使用这个属性可以根据路由来注册中间件。
我们的路由有:goods/info,goods/detail两个路由器
我们可以将$routeMiddleware属性添加一行
'goods.*'=>\App\Http\Middleware\GoodsMiddleware::class,
\App\Http\Middleware\Authenticate::class, 'auth.basic'=>\Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest'=>\App\Http\Middleware\RedirectIfAuthenticated::class, ]; }
更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。