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 相关文章推荐
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
Feb 22 PHP
用php过滤危险html代码的函数
Jul 22 PHP
php之对抗Web扫描器的脚本技巧
Oct 01 PHP
php split汉字
Jun 05 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
Jun 09 PHP
Symfony学习十分钟入门经典教程
Feb 03 PHP
joomla组件开发入门教程
May 04 PHP
PHP设计模式之迭代器模式
Jun 17 PHP
php实现的debug log日志操作类实例
Jul 12 PHP
PHP socket 模拟POST 请求实例代码
Jul 18 PHP
PHP中的函数声明与使用详解
May 27 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 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
isset和empty的区别
2007/01/15 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
destoon之一键登录设置
2014/06/21 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
php二维码生成
2015/10/19 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
利用javascript查看html源文件
2006/11/08 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
node.js微信小程序配置消息推送的实现
2019/02/13 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
wxPython实现整点报时
2019/11/18 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
scrapy头部修改的方法详解
2020/12/06 Python
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
物流毕业生个人的自我评价
2014/02/13 职场文书
学习党章心得体会2016
2016/01/15 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书