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 相关文章推荐
通过5个php实例细致说明传值与传引用的区别
Aug 08 PHP
用 Composer构建自己的 PHP 框架之构建路由
Oct 30 PHP
php计算给定时间之前的函数用法实例
Apr 03 PHP
2款PHP无限级分类实例代码
Nov 11 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
CodeIgniter连贯操作的底层原理分析
May 17 PHP
利用ajax和PHP实现简单的流程管理
Mar 23 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 PHP
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
Mar 29 PHP
Jsonp劫持学习
Apr 01 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
将二维数组转为一维数组的2种方法
2014/05/26 PHP
帝国cms常用标签汇总
2015/07/06 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
PHP7引入的"??"和"?:"的区别讲解
2019/04/08 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&”)
2016/12/23 Javascript
Javascript Function.prototype.bind详细分析
2016/12/29 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
js判断节假日实例代码
2017/12/27 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
使用vue制作滑动标签
2019/09/21 Javascript
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
Python使用post及get方式提交数据的实例
2019/01/24 Python
python sklearn库实现简单逻辑回归的实例代码
2019/07/01 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
英国打印机墨盒销售网站:Ink Factory
2019/10/07 全球购物
C语言笔试题
2014/09/04 面试题
心理学专业求职信
2014/06/16 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
党员民主评议自我评价
2014/10/20 职场文书
诚信承诺书
2015/01/19 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书
读《儒林外史》有感:少一些功利,多一些真诚
2020/01/19 职场文书