在用户登录时禁用 HTML 视图缓存


Disabling HTML views cache when a user is logged in

当我的一个用户登录时,我正在尝试在 CakePHP 中禁用视图缓存。 我发现如果我在核心中禁用 cache.check,它会停止在缓存/视图文件夹中搜索缓存视图,并将现有缓存文件保留在原位。我希望能够动态关闭缓存。检查我的用户登录时。我不想删除缓存文件,只为登录用户禁用它们。

我尝试了

各种各样的解决方案,但每次尝试都失败了。非常感谢所有帮助。

CacheDispatcher筛选器负责调度缓存的视图,因此您必须在某个位置挂接到此过程,并根据用户当前是否登录,在调度程序筛选器完成其工作之前更改 Cache.check 的值。

例如,您可以在引导程序中执行此操作

App::uses('AuthComponent', 'Controller/Component');
if(AuthComponent::user()) {
    Configure::write('Cache.check', false);
}

或者,为了获得更好的可测试性,您可以将其移动到自定义调度程序筛选器中,该筛选器在原始缓存调度程序之前或代替原始缓存调度程序

运行

app/routeing/filter/MyCustomCacheDispatcher.php

App::uses('AuthComponent', 'Controller/Component');
App::uses('CakeEvent', 'Event');
App::uses('CacheDispatcher', 'Routing/Filter');
class MyCustomCacheDispatcher extends CacheDispatcher
{
    public function beforeDispatch(CakeEvent $event)
    {
        if(AuthComponent::user()) {
            Configure::write('Cache.check', false);
        }
        parent::beforeDispatch($event);
    }
}

启动

Configure::write('Dispatcher.filters', array(
    'AssetDispatcher',
    'MyCustomCacheDispatcher'
    //'CacheDispatcher'
));

如果您使用的是自定义会话密钥,请确保在完成这些检查之前AuthComponent::$sessionKey设置为预期值!

参见

  • http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#accessing-the-logged-in-user
  • http://book.cakephp.org/2.0/en/development/dispatch-filters.html