Не работает TagDependency::invalidate()

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
diSpector
Сообщения: 3
Зарегистрирован: 2019.03.10, 11:09

Не работает TagDependency::invalidate()

Сообщение diSpector »

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

Логика такая:
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, который затрет зависимость по тегу, после чего кэш будет удален и будет выведено новое ФИО из БД.

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

Уже потратил несколько часов, чтобы разобраться, но ответа так и не нашел. Что я делаю не так?
frid-karatel
Сообщения: 50
Зарегистрирован: 2017.03.06, 15:37
Откуда: Владивосток

Re: Не работает TagDependency::invalidate()

Сообщение frid-karatel »

Главный вопрос - почему кэш пользователя привязан к текущему пользователю?
По идее, должно быть не Yii::$app->user->id, а $id и $model->id
diSpector
Сообщения: 3
Зарегистрирован: 2019.03.10, 11:09

Re: Не работает TagDependency::invalidate()

Сообщение diSpector »

frid-karatel писал(а): 2019.03.10, 15:26 Главный вопрос - почему кэш пользователя привязан к текущему пользователю?
По идее, должно быть не Yii::$app->user->id, а $id и $model->id
Yii::$app->user->id используется только для создания id в теге кэша - current_user . id и на функционал влиять не должно.
Заменил на предложенный Вами вариант, всё равно не работает.
diSpector
Сообщения: 3
Зарегистрирован: 2019.03.10, 11:09

Re: Не работает TagDependency::invalidate()

Сообщение diSpector »

Есть у кого-нибудь еще варианты?
Ответить