Laravel загружает промежуточное ПО в маршрутах при условии - PullRequest
0 голосов
/ 20 июня 2019

У меня есть файлы маршрута для моего API, и я использую этот пакет для кэширования всего ответа.

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');

Но не работает, я не уверен, смогу ли я добавить промежуточное ПО таким способом.

1 Ответ

0 голосов
/ 20 июня 2019

Есть несколько способов сделать это, один из них - использовать handle() метод HttpKernel для сброса промежуточного программного обеспечения 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);
}

Я не проверял, это работает, но оно должно делать эту работу.

...