У меня есть проблемы с недействительностью тега в FOSHttpCacheBundle. Я могу добавить тег к ответу, но не могу сделать его недействительным. Я пытался с помощью команды (FOS: httpcache: invalidate: Tag), а также с помощью ручной аннулирования.
$cacheManager = $this->get('fos_http_cache.cache_manager');
$cacheManager->invalidateTags(['tests'])->flush();
Мой конфиг:
fos_http_cache:
proxy_client:
symfony:
http:
servers:
- 172.18.0.7
base_url: 172.18.0.7/app_dev.php
cache_control:
defaults:
overwrite: true
rules:
-
match:
methods: [GET]
path: ^/api
headers:
cache_control:
public: true
max_age: 0
s_maxage: 64000
vary: [X-Accept-Version, Accept, Accept-Encoding, Accept-Language]
etag: strong
tags:
enabled: true
Мой AppCache.php
class AppCache extends HttpCache implements CacheInvalidation
{
use EventDispatchingHttpCache;
public function fetch(Request $request, $catch = false)
{
return parent::fetch($request, $catch);
}
public function __construct(HttpKernelInterface $kernel, $cacheDir = null)
{
parent::__construct($kernel, $cacheDir);
$this->addSubscriber(new CustomTtlListener());
$this->addSubscriber(new PurgeListener());
$this->addSubscriber(new RefreshListener());
}
protected function invalidate(Request $request, $catch = false)
{
if ('PURGE' !== $request->getMethod()) {
return parent::invalidate($request, $catch);
}
$response = new Response();
if ($this->getStore()->purge($request->getUri())) {
$response->setStatusCode(200, 'Purged');
} else {
$response->setStatusCode(404, 'Not found');
}
return $response;
}
}
Что интересно, я могу сделать недействительным кеш по маршрутам, как по команде, так и вручную. У вас есть идеи, почему это так?
Задача ещё не решена.
Других решений пока нет …