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下通过POST还是GET来传值
Jun 05 PHP
PHP 读取文件的正确方法
Apr 29 PHP
php解析html类库simple_html_dom(详细介绍)
Jul 05 PHP
非常好用的Zend Framework分页类
Jun 25 PHP
smarty内置函数capture用法分析
Jan 22 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
php结合ACCESS的跨库查询功能
Jun 12 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
Laravel 批量更新多条数据的示例
Nov 27 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 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 array操作10个小技巧分享
2011/06/23 PHP
php基础教程
2015/08/26 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
PHP面向对象程序设计继承用法简单示例
2018/12/28 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
jQuery中animate()方法用法实例
2014/12/24 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
Python3实现从指定路径查找文件的方法
2015/05/22 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
python3中int(整型)的使用教程
2017/03/23 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
Python实现的三层BP神经网络算法示例
2018/02/07 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
opencv+python实现均值滤波
2020/02/19 Python
在购买印度民族服饰:Soch
2020/09/15 全球购物
汽车电子与维修专业大学生求职信
2013/09/28 职场文书
给老婆的婚前保证书
2014/02/01 职场文书
2015教师节通讯稿
2015/07/20 职场文书
纪念建国70周年演讲稿
2019/07/19 职场文书