В восьмёрке есть кэш-контекст 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+
Похожие записи
- Тюнинг кэширования блоков с формой
- Оптимизация кэширования больших меню
- Производительность EntityStorageInterface::load() vs EntityStorageInterface::loadMultiple()
- Производительность Entity Query vs Query Builder vs Sql query
- Отличие методов BaseFieldDefinition::setDefaultValue() и BaseFieldDefinition::setInitialValue()
Добавить комментарий