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

Php 当用户登录时禁用HTML视图缓存,php,cakephp,caching,Php,Cakephp,Caching,当我的一个用户登录时,我试图在CakePHP中禁用视图缓存。我发现,如果在core中禁用cache.check,它将停止在cache/views文件夹中搜索缓存视图,并保留现有缓存文件。我希望能够在用户登录时动态关闭cache.check。我不想删除缓存文件,只对登录用户禁用它们 我尝试了各种各样的解决方案,但每次都失败了。非常感谢您的帮助 由CacheDispatcher筛选器负责,因此您必须在某个位置连接到该过程,并根据用户当前是否登录,更改缓存的值。在dispatcher筛选器执行其工作之

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


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

CacheDispatcher
筛选器负责,因此您必须在某个位置连接到该过程,并根据用户当前是否登录,更改
缓存的值。在dispatcher筛选器执行其工作之前,请检查

例如,您可以在引导中这样做

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

if(AuthComponent::user()) {
    Configure::write('Cache.check', false);
}
或者,为了更好的可测试性,您可以将其移动到在原始缓存调度程序之前运行或替代原始缓存调度程序的自定义调度程序筛选器中

app/Routing/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'
));
自举

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
设置为预期值

另见


请始终提及您的确切CakePHP版本,并相应地标记您的问题@ndm注意到,我以后会这样做。感谢您提供了这个经过深思熟虑的答案,它对cakePHP的工作方式非常有帮助,也很有见地。我唯一发现的是当我将调试值更改为0到2时,它发送了一个致命错误:Error:Class'AuthComponent'not found File:/var/www/site/app/Config/bootstrap.php行:99我发现我可以通过从引导中删除authcomponet并在刷新一次后读取它们来清除此错误。但我发现它会在服务器的每个实例重新启动后显示。啊,我在引导中找到了解决方案,我现在正在使用App::uses('AuthComponent','Controller/Component');相反。@KevinWeber对不起,我的错,当我写这篇文章时刚刚醒来:)我会更新我的答案。