如何在Yii中通过配置禁用缓存?

9
在Yii中,我已经通过config/main.php文件启用了APC缓存:
'cache' => array(
    'class' => 'system.caching.CApcCache',
),

当我使用Yii的内置缓存方法时,它能很好地工作:

Yii::app()->cache->set('key', $value);

然而,是否有一种基于配置的临时关闭方法?例如,我不想在启用YII_DEBUG时启用它,并希望$votes = Yii::app()->cache->get("key"); 始终返回false,就像当它为空时一样。
我尝试通过注释掉配置设置来关闭它,但它会给出(不是无理的)错误:Call to a member function get() on a non-object
3个回答

15

您可以配置一个不缓存的缓存类(因此它不会存储任何东西,而get()将始终返回FALSE)。

可能Yii已经预置了一个无缓存?是的,它被称为CDummyCache,它根本不进行缓存。

它是为您在问题中概述的情况编写的,即Yii::app()->cacheNULL

请参见Caching文档


4
如果您需要仅在本地禁用缓存,请将以下代码添加到main-local.php中。它将覆盖main.php中的缓存配置。
'components' => [
... 
    'cache'=> [
        'class'=>'CDummyCache',
    ],
...
]

CDummyCache是一个占位符缓存组件。

CDummyCache不会缓存任何内容。它的作用是为了让开发人员始终能够配置一个'cache'应用程序组件,而无需检查Yii::app()->cache是否为空。通过将CDummyCache替换为其他缓存组件,可以快速从非缓存模式切换到缓存模式。

Yii 1.x: CDummyCache文档

Yii 2.x: DummyCache文档


这会导致 Class CDummyCache does not exist - The Bndr
如果您使用Yii 2.X,则需要使用yii\caching\DummyCache而不是CDummyCache。 - Roman Podlinov

-4

尝试这段代码:

'cache' => array(  
        'class' => 'system.caching.CFileCache'  
    ), 

1
请用文字解释您的答案,而不仅仅是代码。并且请解释您的答案与其他答案的区别,因为该问题已经在一年前得到了回答。 - Olle Sjögren
2
我想要禁用缓存,而不是更改缓存机制。这只会改变缓存的方式。 - Ian Hunter
这只是一个配置Yii将缓存写入文件的示例。它并没有回答问题。已标记为删除。 - Dzhuneyt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接