VladimirAndreev
@VladimirAndreev
php web dev

Yii2, как установить нестандартный yii\caching\Cache\buildKey для модуля?

Всем привет!

Есть мысль использовать в кешировании псевдотеги на уровне ключей кеша, вида:
['|blog|', '|user|', '|userstat|', '|commentcount|', '|uid=777|']

чтобы в случае необходимости весь кеш можно было грохать по необходимости фрагментарно. Например, скомментил что-нибудь пользователь - и почистился его и только его кеш статистики, последних комментариев, всех комментариев, и разная прочая полезная фигня.

но, штатный buildKey обламывает эту тему своим
md5(json_encode($key))

есть ли способ для отдельного модуля переопределить только этот метод?
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
VladimirAndreev
@VladimirAndreev Автор вопроса
php web dev
В общем, вроде как работает так:

В файле инициализации модуля прописать вот так:
if (!empty($this->components['cache'])) {
    yii::$container->set(
        'cache',
        ['class' => $this->components['cache']['class']]
    );
}


При получении инстанса кеша звать так:
$this->cache = Yii::$container->get('cache');

Единственное, пока не понятно, можно ли динамически определять тип кеша, так как пока app\modules\blog\Cache наследует от yii\caching\MemCache ...

Видимый пока вариант - вынести buildKey в трейт и создать все доступные варианты классов кешей...

Таким образом, можно использовать более одного движка кешей в модуле :)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
fornit1917
@fornit1917
В Yii2 все компоненты через DI контейнер создаются. Вы можете в конфиге нужного вам модуля подсунуть свою реализацию Cache в контейнер.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы