@disSpector

Yii2. Почему не работает TagDependency::invalidate()?

Всем привет.
Помогите, пожалуйста, разобраться с кэшированием по условию (TagDependence) в Yii2. Использую Memcached.
Хочу сделать кэширование личных данных пользователя (ФИО).

Логика такая:
1) в компоненте UsersAuthComponent в методе getUserById устанавливаю кэш по TagDependency.

public function getUserById($id)
    { // получить запись (ActiveRecord) пользователя User по id
        return $this->getModel()::find()
            ->andWhere(['id' => $id])
            ->cache(null, new TagDependency(['tags' => 'current_user' . \Yii::$app->user->id]))
            ->one();
}


2) затем, если в форму редактирования ФИО вводятся новые данные, вызывается метод editUser() того же компонента UsersAuthComponent, в котором происходит удаление условия по тегу - TagDependency::invalidate.

public function editUser($model)
    { // обновить данные пользователя
        if (!$model->validate(['fio'])) {
            return false;
        }
        if (!$model->update()) {
            return false;
        }

        TagDependency::invalidate(\Yii::$app->cache, 'current_user'. \Yii::$app->user->id);
        return true;
    }


Я понимаю это так, что когда в процессе редактирования будет обновлено поле ФИО пользователя, будет вызван метод editUser, который затрет зависимость по тегу, после чего кэш будет удален и будет выведено новое ФИО из БД.

На деле, всё происходит не так - в БД поле обновляется, а на странице пользователя нет (выводится из кэша).

Подскажите, пожалуйста, что я делаю не так?
  • Вопрос задан
  • 644 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы