前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >laravel中间件middleware如何使用详细讲解

laravel中间件middleware如何使用详细讲解

作者头像
章鱼喵
发布2019-05-15 15:09:32
3.2K0
发布2019-05-15 15:09:32
举报
文章被收录于专栏:codingcoding

什么是中间件

可以简单地将中间件理解为请求与响应之间的中间人。用户发出一个路由请求,经过中间件的验证或过滤后,才能获取相应的响应内容。

定义中间件

laravel提供了定义中间件的指令,如定义一个获取当前时间的中间件

代码语言:javascript
复制
$ php artisan make:middleware GetCurrentTime

自动生成了 app/Http/Middleware/GetCurrentTime.php 文件

handle方法中写具体的业务代码:

代码语言:javascript
复制
public function handle($request, Closure $next)
{
    dump(date('Y-m-d H:i:s', time()));
    return $next($request);
}

注册中间件

定义好的中间件需要进行注册才能使用,注册的方式有三种:

全局注册

即所有路由都必须经过此中间件

app/Http/Kernel.php 中的 $middleware 进行注册:

代码语言:javascript
复制
protected $middleware = [
    # ...
    \App\Http\Middleware\GetCurrentTime::class,
];

效果如下:

全局注册作用于所有路由,应用的场景比较少,毕竟开销太大

路由注册

只针对特定的路由起作用

首先在 app/Http/Kernel.php$routeMiddleware 中注册自定义的路由

代码语言:javascript
复制
protected $routeMiddleware = [
    # ...
    'get_current_time' => \App\Http\Middleware\GetCurrentTime::class,
];

然后在 routes/web.php 中将中间件绑定到指定的路由

代码语言:javascript
复制
Route::get('test', 'TestController@index')->name('test')->middleware('get_current_time')

创建TestController:

代码语言:javascript
复制
$ php artisan make:controller TestController

image

浏览器访问:http://local.laravel-study.com/test

image

这种将中间件逐一绑定到路由的方式效率太低了,一般采用路由分组的方式进行绑定,格式如下:

代码语言:javascript
复制
Route::group(['middleware' => ['get_current_time']], function () {
    Route::get('test', 'TestController@index')->name('test');
});

控制器中注册

去掉路由中的中间件绑定

代码语言:javascript
复制
Route::get('test', 'TestController@index')->name('test');

修改 app/Http/Controllers/TestController.php 代码:

代码语言:javascript
复制
class TestController extends Controller
{
    public function __construct()
    {
        // 排除某些方法
//        return $this->middleware(['get_current_time'])->except('index');
        return $this->middleware(['get_current_time']);
    }

    public function index()
    {
        echo "test";
    }
}

以上方法中,路由分组注册中间件最常用

源码库

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.05.12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是中间件
  • 定义中间件
  • 注册中间件
    • 全局注册
      • 路由注册
        • 控制器中注册
        相关产品与服务
        消息队列 TDMQ
        消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档