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 相关文章推荐
文件系统基本操作类
Nov 23 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
Aug 26 PHP
PHP安全配置详细说明
Sep 26 PHP
Admin generator, filters and I18n
Oct 06 PHP
CodeIgniter图像处理类的深入解析
Jun 17 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
php+ajax实时输入自动搜索匹配的方法
Dec 26 PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 PHP
PHP数组函数知识汇总
May 12 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
PHP/HTML混写的四种方式总结
Feb 27 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
Mar 07 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
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
PHP文件上传主要代码讲解
2013/09/30 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
饭店工作计划书
2014/01/10 职场文书
企业文化建设实施方案
2014/03/22 职场文书
美丽乡村建设实施方案
2014/03/23 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
项目验收申请报告
2015/05/15 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
Oracle锁表解决方法的详细记录
2022/06/05 Oracle
sql注入报错之注入原理实例解析
2022/06/10 MySQL