【问题标题】:Laravel load middleware in routes under conditionLaravel 在条件下在路由中加载中间件
【发布时间】:2019-06-20 19:24:18
【问题描述】:

我的 api 有一个路由文件,我使用 this 包来缓存整个响应。

routes/api.php

<?php

Route::get('/types', 'TypeController@indexType')->middleware('cacheResponse:600');

这很好,但是当我在请求中有特定标头时我需要跳过这个中间件加载,所以我制作了这个额外的中间件

conditionalCacheResponse.php

<?php

namespace App\Http\Middleware;

use Closure;

class ConditionalCacheResponse
{
    public function handle($request, Closure $next)
    {
        if (request()->header('Draft') != true) {
            $this->middleware('cacheResponse:3600');
        }

        return $next($request);
    }
}

这样设置

routes/api.php

<?php

Route::get('/types', 'TypeController@indexType')->middleware('conditionalCacheResponse');

但不工作,我不确定我是否可以通过这种方式附加中间件。

【问题讨论】:

标签: laravel caching middleware


【解决方案1】:

有几种方法可以做到这一点,一种方法是使用 HttpKernel 的 handle() 方法基于对请求标头的检查来取消设置 CacheResponse 中间件。

所以在app/Http/Kernel.php,添加这个方法:

public function handle($request)
{
    if ($request->header('Draft')) {
        if (($key = array_search('Spatie\ResponseCache\Middlewares\CacheResponse', $this->middleware)) !== false) {
            unset($this->middleware[$key]);
        }
    }
    return parent::handle($request);
}

我还没有检查这是否有效,但它应该可以完成这项工作。

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2012-11-06
    • 2020-12-02
    • 2017-02-08
    • 2016-06-03
    • 2020-08-23
    • 2019-03-16
    • 2018-09-22
    • 2016-12-09
    相关资源
    最近更新 更多