中间件?什么鬼? 大家第一次接触这个词都会有这么个疑问,但它其实没那么神秘。

一句话就可以解释它:过滤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 时会返回首页。

最新文章

  1. MyBatis2:config.xml文件
  2. eclipse maven update error 解决方法
  3. sql常用语句
  4. edmx代码分析
  5. Swift2.1 语法指南——高级操作符
  6. 模拟游客一天的生活与旅游java程序代写源码
  7. oc语言学习之基础知识点介绍(三):类方法、封装以及继承的介绍
  8. 转:postgresql:pg_restore: [archiver] input file does not appear to be a valid archive的解决方法
  9. js练习【DOM操作】
  10. 关于JS中的this关键字
  11. 动态加载与插件系统的初步实现(3):WinForm示例
  12. 红黑树 C++实现
  13. iOS9新特性之常见关键字、泛型
  14. 数据库面试技巧,通过JDBC展示自己专业性,摘自java web轻量级开发面试教程
  15. MySQL数据引擎
  16. HZAU 1199: Little Red Riding Hood 01背包
  17. LeetCode(68)-Compare Version Numbers
  18. softmax 损失函数求导过程
  19. Django-404错误处理
  20. kafka 学习笔记

热门文章

  1. window7访问虚拟机ubuntu中的mysql
  2. 使用Spring进行远程访问与Web服务
  3. [Python爬虫] 之十九:Selenium +phantomjs 利用 pyquery抓取超级TV网数据
  4. mahout运行测试与数据挖掘算法之聚类分析(一)kmeans算法解析
  5. SAP MM模块 经常使用函数
  6. cocos2d-x 3.1.1 学习笔记[11] http请求 + json解析
  7. SqlServer+Topshelf+Quartznet做集群,定时任务分布式处理
  8. ASP.NET_SessionId 不相同导致验证码出错
  9. centos7下安装openvpn,访问内网服务器 (二) windows访问
  10. SQl查询数据库表名、表的列名、数据类型、主键