我有一个用于我的api和im的路由文件,我使用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');
但是无法正常工作,我不确定是否可以通过这种方式附加中间件。
答案 0 :(得分:0)
有几种方法可以执行此操作,一种方法是使用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);
}
我还没有检查这是否正常,但是应该可以完成。