@InfoLabs

Как закешировать с зависимостью?

Здравствуйте. Ломаю голову 3 час, может вы сможете помочь...

И так, данные кэшируем через FileCache.
Что имеем? Страницу, которая принимает гет параметры: id, page. На странице вызывается функция getHtml и генерирует HTML код, после выводит на страницу. Необходимо закешировать те страницы которые были открыты по тегу.
Что бы в итоге я мог удалить кэш с key -> ID, а все что key -> ID,PAGE удалились самостоятельно.

Вот что сделал. Но не удаляется по цепочке...

public function getHtmlCache($id, $page) 
    {
        if(!$this->site->cached) {
            return $this->getHtml($id, $page);
        }

        $cache = Yii::createObject([
            'class' => 'yii\caching\FileCache',
            'cachePath' => '@common/runtime/cache/'
        ]);

        $page = $page ?? 0;

        $cache_key = [
            'method' => 'API',
            'type' => 'html',
            'id' => $id
        ];

        if($cache->exists($cache_key) && Yii::$app->request->get('del')) {
            return $cache->delete($cache_key);
        }

        if($page > 0) {
            $cache_key['page'] = $page;
        }

        $data = $cache->get($cache_key);

        if($data === false) {
            $data = $this->getHtml($id, $page);
            $cache->set($cache_key, $data, null, new TagDependency(['tags' => 'api_site_id' . $id]));
        }

        return $data;
}
  • Вопрос задан
  • 227 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Для кеширования есть готовые механизмы в yii, Вы придумываете велосипед. К тому же механизмы разные, для кеширования данных, для кеширования страницы, для кешрования запроса. Зависимости при этом тоже есть готовые. Все есть в документации:
www.yiiframework.com/doc-2.0/guide-caching-overvie...
А вот конкретно по кешированию целого http запроса: www.yiiframework.com/doc-2.0/guide-caching-http.html
Ответ написан
Ваш ответ на вопрос

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

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