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 相关文章推荐
php中目录,文件操作详谈
Mar 19 PHP
php session 预定义数组
Mar 16 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
php实现保存submit内容之后禁止刷新
Mar 19 PHP
php+js实现异步图片上传实例分享
Jun 02 PHP
关于URL最大长度限制的相关资料查证
Dec 23 PHP
php中使用gd库实现远程图片下载实例
May 12 PHP
PHP 数组基本操作方法详解
Jun 17 PHP
PHP strcmp()和strcasecmp()的区别实例
Nov 05 PHP
PHP互换两个变量值的方法(不用第三变量)
Nov 14 PHP
phpmailer绑定邮箱的实现方法
Dec 01 PHP
基于PHP实现用户登录注册功能的详细教程
Aug 04 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
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
JavaScript关于select的相关操作说明
2010/01/13 Javascript
jquery Validation表单验证使用详解
2020/09/12 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
2016/05/13 Javascript
JavaScript的ExtJS框架中表格的编写教程
2016/05/21 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
node.js博客项目开发手记
2018/03/16 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
Python 3.x 新特性及10大变化
2015/06/12 Python
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
PyQt QCombobox设置行高的方法
2019/06/20 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
通过实例解析Python调用json模块
2019/12/11 Python
python中函数返回多个结果的实例方法
2020/12/16 Python
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
Juicy Couture Beauty官方网站:香水和化妆品
2019/03/12 全球购物
留学自荐信写作方法
2014/01/27 职场文书
名企HR怎样看待求职信
2014/02/23 职场文书
2015年度企业工作总结
2015/05/21 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书