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 相关文章推荐
教你IIS6的PHP最佳配置方法
Sep 05 PHP
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
php feof用来识别文件末尾字符的方法
Aug 01 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
Mar 20 PHP
php和mysql中uft-8中文编码乱码的几种解决办法
Apr 19 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 PHP
php实现图片添加水印功能
Feb 13 PHP
使用PHP函数scandir排除特定目录
Jun 12 PHP
PHP5.3安装Zend Guard Loader图文教程
Sep 29 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
php简单计算年龄的方法(周岁与虚岁)
Dec 06 PHP
Laravel validate error处理,ajax,json示例
Oct 25 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
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
php 使用post,get的一种简洁方式
2010/04/25 PHP
PHP版 汉字转码的实现详解
2013/06/09 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
javascript instanceof 与typeof使用说明
2010/01/11 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
vue v-model的用法解析
2020/10/19 Javascript
使用python Django做网页
2013/11/04 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
优秀中专生推荐信
2013/11/17 职场文书
医科大学毕业生自荐信
2014/02/03 职场文书
亲子读书活动方案
2014/02/22 职场文书
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python
Nginx利用Logrotate实现日志分割
2022/05/20 Servers