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

时间:2015-01-22 22:34:33

标签: php cakephp caching

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

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

1 个答案:

答案 0 :(得分:2)

CacheDispatcher过滤器负责dispatching cached views,因此您必须在某个位置挂钩此过程,并根据用户当前是否已登录,更改Cache.check之前的值调度程序过滤器完成其工作。

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

App::uses('AuthComponent', 'Controller/Component');

if(AuthComponent::user()) {
    Configure::write('Cache.check', false);
}

或者,为了更好的可测试性,您可以将其移动到在原始缓存调度程序之前或之后运行的自定义调度程序过滤器

应用/路由/过滤/ 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设置为预期值

另见