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 27 PHP
几种有用的变型 PHP中循环语句的用法介绍
Jan 30 PHP
mcrypt启用 加密以及解密过程详细解析
Aug 07 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
php实例分享之二维数组排序
May 15 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
Jan 27 PHP
PHP随机数 C扩展随机数
May 04 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
PHP7 foreach() 函数修改
Mar 09 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
全新的PDO数据库操作类php版(仅适用Mysql)
2012/07/22 PHP
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
JavaScript 异步调用框架 (Part 1 - 问题 & 场景)
2009/08/03 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
JavaScript判断DIV内容是否为空的方法
2016/01/29 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
js倒计时显示实例
2016/12/11 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
浅谈React碰到v-if
2018/11/04 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
python求pi的方法
2014/10/08 Python
简单介绍Ruby中的CGI编程
2015/04/10 Python
Python list操作用法总结
2015/11/10 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
澳大利亚和新西兰最大的在线旅行社之一:Aunt Betty
2019/08/07 全球购物
25道Java面试题集合
2013/05/21 面试题
通信工程毕业生求职信
2013/11/16 职场文书
会计专业应届生求职信
2013/11/24 职场文书
人民调解员培训方案
2014/06/05 职场文书
参赛口号
2014/06/16 职场文书