laravel高级用法(Laravel5.1框架注册中间件的三种场景详解)
laravel高级用法
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的源码。
|
<?php namespace App\Http\Controllers; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Routing\Controller as BaseController; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; abstract class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; } |
BaseController类
从源码中我们可以看到有一个属性为middleware,这个middleware属性就是我们要找的,所以只要在需要注册的控制器下使用这个属性即可完成注册。
|
protected $middleware = []; |
|
<?php namespace Illuminate\Routing; use BadMethodCallException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; abstract class Controller { /** * The middleware registered on the controller. * * @var array */ protected $middleware = []; /** * Register middleware on the controller. * * @param array|string|\Closure $middleware * @param array $options * @return \Illuminate\Routing\ControllerMiddlewareOptions */ public function middleware( $middleware , array $options = []) { foreach (( array ) $middleware as $m ) { $this ->middleware[] = [ 'middleware' => $m , 'options' => & $options , ]; } return new ControllerMiddlewareOptions( $options ); } /** * Get the middleware assigned to the controller. * * @return array */ public function getMiddleware() { return $this ->middleware; } /** * Execute an action on the controller. * * @param string $method * @param array $parameters * @return \Symfony\Component\HttpFoundation\Response */ public function callAction( $method , $parameters ) { return call_user_func_array([ $this , $method ], $parameters ); } /** * Handle calls to missing methods on the controller. * * @param array $parameters * @return mixed * * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException */ public function missingMethod( $parameters = []) { throw new NotFoundHttpException( 'Controller method not found.' ); } /** * Handle calls to missing methods on the controller. * * @param string $method * @param array $parameters * @return mixed * * @throws \BadMethodCallException */ public function __call( $method , $parameters ) { throw new BadMethodCallException( "Method [{$method}] does not exist." ); } |
给整个控制器注册中间件
我们选用系统的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 , |
|
<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { /** * The application's global HTTP middleware stack. * * @var array */ protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode:: class , \App\Http\Middleware\EncryptCookies:: class , \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse:: class , \Illuminate\Session\Middleware\StartSession:: class , \Illuminate\View\Middleware\ShareErrorsFromSession:: class , \App\Http\Middleware\VerifyCsrfToken:: class , ]; /** * The application's route middleware. * * @var array */ protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate:: class , 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth:: class , 'guest' => \App\Http\Middleware\RedirectIfAuthenticated:: class , ]; } |
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/baochao95/article/details/54948129
- laravel-admin代码执行流程(解决laravel-admin 自己新建页面里 js 需要刷新一次的问题)
- laravel模型获取表名(Laravel 对某一列进行筛选然后求和sum的例子)
- laravel新增数据表(laravel实现上传图片的两种方式小结)
- laravel的api验证失败重定向(Laravel的Auth验证Token验证使用自定义Redis的例子)
- laravel完成权限验证(laravel实现Auth认证,登录、注册后的页面回跳方法)
- laravel关联模型字段冲突(浅谈laravel中的关联查询with的问题)
- laravel数据库查询(Laravel获取所有的数据库表及结构的方法)
- laravel数据库日志(Laravel 将数据表的数据导出,并生成seeds种子文件的方法)
- laravelqq邮箱发送失败(解决laravel 表单提交-POST 异常的问题)
- laravel 后台任务配置(在Laravel中使用GuzzleHttp调用第三方服务的API接口代码)
- laravel消息机制(laravel框架中间件 except 和 only 的用法示例)
- laravel框架的运行机制(Laravel5框架自定义错误页面配置操作示例)
- laravel如何设置默认模块(laravel-admin 中列表筛选方法)
- laravel框架保存数据(Laravel 数据库加密及数据库表前缀配置方法)
- laravel查询条件数组写法(解决Laravel 使用insert插入数据,字段created_at为0000的问题)
- laravel权限控制(laravel-admin 在列表页添加自定义按钮的例子)
- 毛戈平全国第一柜花落银泰 高端国货迎来 高光 时刻(毛戈平全国第一柜花落银泰)
- 14岁丧父 20岁丧母,从苦难走向辉煌的银泰创始人沈国军(14岁丧父20岁丧母从苦难走向辉煌的银泰创始人沈国军)
- 银泰集团董事长沈国军获评 北京影响力 十大企业家(银泰集团董事长沈国军获评)
- 15帅气男士发型,清爽时尚很有型,喜欢就试试(清爽时尚很有型)
- 哪几个历史人物被影协主席李雪健演的活灵活现(哪几个历史人物被影协主席李雪健演的活灵活现)
- 王伦狭隘,晁盖霸道,宋江奸诈骨头软,只有鲁智深才适合当寨主(王伦狭隘晁盖霸道)
热门推荐
- python程序怎么打包(Python 实现文件打包、上传与校验的方法)
- python注册码实现(python实现Virginia无密钥解密)
- SqlServer生成连续数字根据指定的数字操作(SqlServer生成连续数字根据指定的数字操作)
- memcache安装与调优部署文件(Memcached构建缓存服务器的方法)
- Jquery实现table表格行的添加、删除
- SQL Server数据库应用中有用的几个工具
- python自学编程笔记(Python 编程速成推荐)
- docker gitlab 配置(使用Docker构建一个Git镜像使用clone仓库)
- 如何删除docker中已停止的容器(一条命令重启所有已停止的docker容器操作)
- css3渐变放大功能(CSS3 渐变Gradients之CSS3 线性渐变)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9