Php 强制刷新后显示的更新数据(Yii2)

Php 强制刷新后显示的更新数据(Yii2),php,firefox,yii2,ubuntu-18.04,Php,Firefox,Yii2,Ubuntu 18.04,我正在使用Yi2 basic,当我更新表单时,数据库中的数据更新成功,但即使在刷新链接后,更新数据也不会显示在表单中,但当我硬刷新或删除缓存时,它会在表单中显示更新的数据,可能会出现什么问题,因为它在几天前工作正常,但突然它开始显示这种行为,即使其他应用程序在同一个服务器上工作正常,我需要帮助。 是yii2配置问题还是服务器配置问题? 在db.php中,我有这两个值 'enableSchemaCache' => true, 'enableQueryCache' => false,

我正在使用Yi2 basic,当我更新表单时,数据库中的数据更新成功,但即使在刷新链接后,更新数据也不会显示在表单中,但当我硬刷新或删除缓存时,它会在表单中显示更新的数据,可能会出现什么问题,因为它在几天前工作正常,但突然它开始显示这种行为,即使其他应用程序在同一个服务器上工作正常,我需要帮助。 是yii2配置问题还是服务器配置问题? 在db.php中,我有这两个值

'enableSchemaCache' => true,
'enableQueryCache' => false,

我尝试将架构缓存启用为false,但没有成功。

似乎启用了某种(数据)缓存。 你可以:

  • 检查用于从数据库检索数据的方法,以查看是否已启用缓存。 这些方法是:
    find()
    findOne()
    findAll()
    。 检查它们是否已被代码覆盖或扩展
  • 如果已扩展默认的
    find()
    方法或其任何变体,则还可以扩展
    afterSave()
    方法,以便在对数据库执行更新后刷新缓存。 下面是我在测试环境中执行更新后用来刷新缓存的内容

    public function afterSave($insert, $changedAttributes)
    {
        parent::afterSave($insert, $changedAttributes);
    
        //Clears cache if this is an update
        if( !$insert)
        {
            if(method_exists ($this, 'flushCache'))
            {
                $this->flushCache();
            }
        }
    }
    
    public function flushCache()
    {
        Yii::$app->cache->delete($this->getCacheKey());
    }
    
    protected function getCacheKey()
    {
        return self::getCacheKeyPrefix().   $this->getPrimaryKey() ;
    }
    public static function getCacheKeyPrefix()
    {
        return self::CACHE_PREFIX   .  self::getTableSchema()->name;
    }
    
    解释

  • 写入DB后,Yii调用afterSave()事件
  • 如果执行了插入,则跳过缓存刷新。如果执行了更新,则调用flushCache方法以清除缓存
  • 请注意,您应该了解如何在自己的环境中设置缓存,然后根据需要修改刷新缓存

    让我知道进展如何。
    谢谢,HTH。

    你确定没有任何其他缓存,如页面缓存或片段缓存吗?@masoudvatandoost代码在svn上,这是一个问题,可能是有人更新了缓存片段等,我尝试过,但找不到任何Cluety来查找var_dump and die的问题,或者在每个步骤上使用Yi2记录器。缓存可能位于模型上、视图中,甚至控制器中的某个行为中。对特定类别使用Yii::info(),然后在调试器上检查它们。