Yii2 Как правильно Кэшировать Виджеты?

Можно ли закэшировать виджет по принципу PageCache?
В основном советуют кэшировать фиджеты как фрагменты, но данный кэш применяется уже в представлении и логика вызова виджета все равно отрабатывается каждый раз.
Так же можно закэшировать то место где вызывается виджет, но опять же виджет может стоять уже в десятках мест и переписывать кучу кода ради одного виджета не хочется, так же Виджет может работать вне приложения Yii
В голову приходит только костыльный вариант Поместить виджет внутрь другого, и уже там кэшировать его как фрагмент
  • Вопрос задан
  • 861 просмотр
Решения вопроса 1
@ArturF
php dev
Можно так:

class MyWidget extends yii\base\Widget
{
    public static function widget($config = [])
    {
        $data = Yii::$app->cache->get('key'); // логику формирования ключа нужно сделать исходя из задачи
        if ($data === false) {
            $data = parent::widget($config);
            Yii::$app->cache->set('key', $data);
        }
        
        return $data;
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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