В восьмёрке есть кэш-контекст cookies
, который возвращает значение куки. Значение возвращается без какой-либо обработки, что временами нежелательно, так как кука может быть оооочень длинной (например, как у меня - значения раскрытых фильтров вьюхи). Выход — создать новый кэш-контекст, который вместо raw значения куки будет возвращать его хэш:
// src/Cache/CookiesHashCacheContext.php
namespace Drupal\modulename\Cache;
use Drupal\Core\Cache\Context\CookiesCacheContext;
class CookiesHashCacheContext extends CookiesCacheContext {
/**
* {@inheritDoc}
*/
public function getContext($cookie = NULL) {
$result = parent::getContext($cookie);
return hash('crc32', json_encode($result));
}
}
# modulename.services.yml
services:
cache_context.cookies_hash:
class: Drupal\modulename\Cache\CookiesHashCacheContext
arguments: ['@request_stack']
tags:
- { name: cache.context }
Использование:
$build['#cache']['contexts'][] = 'cookies_hash:example_cookie';
Написанное актуально для
Drupal 8+
Добавить комментарий