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 开发自定义组件(laravel框架模板之公共模板、继承、包含实现方法分析)
- laravel在中间件内生成参数并且传递到控制器中的2种姿势(laravel在中间件内生成参数并且传递到控制器中的2种姿势)
- laravel自定义命令(laravel中数据显示方法默认值和下拉option默认选中)
- laravel完成权限验证(laravel实现Auth认证,登录、注册后的页面回跳方法)
- laravel模块教程(Laravel框架创建路由的方法详解)
- 关于laravel的日常(解决在laravel中auth建立时候遇到的问题)
- laravel模型使用技巧(提高Laravel应用性能方法详解)
- laravel的验证规则(解决在Laravel 中处理OPTIONS请求的问题)
- laravel数据库数据代码(在Laravel的Model层做数据缓存的实现)
- laravel模型获取表名(Laravel 对某一列进行筛选然后求和sum的例子)
- laravel终止函数执行(laravel 输出最后执行sql 附:whereIn的使用方法)
- laravel数据库日志(Laravel 将数据表的数据导出,并生成seeds种子文件的方法)
- laravel框架怎么获取变量(解决laravel id非自增 模型取回为0 的问题)
- laravel 获取数据库操作异常(Laravel Eloquent ORM 多条件查询的例子)
- laravel count 报错(解决laravel5.5访问public报错的问题)
- laravel数据库配置(Laravel如何同时连接多个数据库详解)
- 冯骥才 年意(冯骥才年意)
- ()
- 百事大吉蓝底 绿底手机高清壁纸(绿底手机高清壁纸)
- 蓝底证件照怎么制作 证件照换底色 换尺寸快速搞定(蓝底证件照怎么制作)
- 你喜欢足球吗 足球如何点亮世界的(足球如何点亮世界的)
- 不可分鸽是什么梗(不可分鸽是什么梗)
热门推荐
- 如何用mysql建立图书管理系统(图书管理系统的sqlserver数据库设计示例)
- mysql双主状态不一致(MySQL GTID主备不一致的修复方案)
- 腾讯云服务器怎么安装宝塔(腾讯云服务器无法打开宝塔面板的解决方法放行安全组)
- jquery中return this.each的作用
- 如何修改serv-u主页信息(Serv-U FTP与AD完美集成方案详解)
- web.config自定义配置节点,将多个节点合并
- linux中的软连接是什么(区分Linux硬链接与软链接)
- js开发工具图解(浅谈前端JS沙箱实现的几种方式)
- 微信小程序中的代码怎么编辑(微信小程序新手入门之自定义组件的使用)
- mysqlroot本地远程都可登陆(mysql5.7 设置远程访问的实现)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9