Laravel5.1 框架Middleware中间件基本用法实例分析


Posted in PHP onJanuary 04, 2020

本文实例讲述了Laravel5.1 框架Middleware中间件基本用法。分享给大家供大家参考,具体如下:

中间件?什么鬼? 大家第一次接触这个词都会有这么个疑问,但它其实没那么神秘。

一句话就可以解释它:过滤HTTP请求专用机制。

为什么要使用中间件?

过滤HTTP请求是可以写在别的地方,比如说控制器中 路由中,BUT 抽象出来就有它的理由,比如说Laravel自带的Auth中间件 它要求必须是登录进来的用户才有权访问 如果没有登录就跳转到登录页面,这样的逻辑在很多场景都会用到 这很明显了吧 你不可能在每个控制器或每一个路由都单独实现以便,直接抽出来多方便。

1 使用中间件

1.1 创建中间件

咱创建中间件是使用artisan控制台的:

php artisan make:middleware TestMiddleware

创建好后位于:app/Http/Middleware

1.2 解读中间件

首先我们来看看新创建的中间件是什么模样儿:

class TestMiddleware
{
  /**
   * Handle an incoming request.
   *
   * @param \Illuminate\Http\Request $request
   * @param \Closure $next
   * @return mixed
   */
  public function handle($request, Closure $next)
  {
    return $next($request);
  }
}

解读:middleware中只有 “handle”函数 这个函数呢接受两个参数

它的流程是接受request参数 取出一些东西做验证 如果逻辑通过 执行next闭包。

如果你还是不太懂的话 没关系 咱上实例

1.3 编写中间件

public function handle($request, Closure $next)
  {
    // 如果传入的id参数等于0 就跳转到首页。
    if ($request->input('id') == 0){
      return redirect('/');
    }
    // id参数不等于0 则为通过 进行默认的下一步操作。
    return $next($request);
  }

完事儿后我们需要在 app/Http/Kernel.php 中进行注册:

/**
   * 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,
    // 把我们创建的middleware注册到这里
    'test' => \App\Http\Middleware\TestMiddleware::class,
  ];

注意:我们可以瞧见啊 Kernel 中有两个数组 如果你希望在全局中使用 就注册在middleware数组中,如果你想要局部使用middleware 那么就在routeMiddleware数组中注册。

1.4 使用中间件

好了,注册完之后我们来用用吧:

Route::get('/test-middleware',['middleware'=>'test',function(){
  return 'HI';
}]);

当我们输入:http://localhost:8000/test-middleware?id=1 时会在页面上输出HI 当输入 http://localhost:8000/test-middleware?id=0 时会返回首页。

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
SSI指令
Nov 25 PHP
PHP与SQL注入攻击[一]
Apr 17 PHP
PHP 巧用数组降低程序的时间复杂度
Jan 01 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
Jul 01 PHP
PHP微框架Dispatch简介
Jun 12 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
Jul 18 PHP
PHP中使用GD库创建圆形饼图的例子
Nov 19 PHP
PHP输出缓冲控制Output Control系列函数详解
Jul 02 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
Nov 05 PHP
php封装的page分页类完整实例
Oct 18 PHP
PHP strcmp()和strcasecmp()的区别实例
Nov 05 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
Jan 04 #PHP
Laravel5.1 框架控制器基础用法实例分析
Jan 04 #PHP
Laravel5.1框架路由分组用法实例分析
Jan 04 #PHP
Laravel5.1 框架路由基础详解
Jan 04 #PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
Jan 02 #PHP
PHP+MySQL实现在线测试答题实例
Jan 02 #PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 #PHP
You might like
一个程序下载的管理程序(四)
2006/10/09 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
php中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
2018/09/20 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
javascript中闭包closure的深入讲解
2021/03/03 Javascript
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
pyqt5自定义信号实例解析
2018/01/31 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
python中get和post有什么区别
2020/06/19 Python
银行演讲稿范文
2014/01/03 职场文书
先进集体获奖感言
2014/02/13 职场文书
工程安全员岗位职责
2014/03/09 职场文书
观看《周恩来的四个昼夜》思想汇报
2014/09/12 职场文书
父亲节感言
2015/08/03 职场文书
初中军训感想
2015/08/07 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang