Php 在USER_INT函数中禁用TYPO3中的缓存
我正在从事一个TYPO3项目,在这个项目中,我必须根据条件动态禁用缓存。这是一个非常具体的用例,不会经常发生 我计划使用一个USER_INT函数,在这里我将执行检查并在必要时禁用缓存。USER_INT函数工作完美,每次加载页面时都会调用它 问题是,我不能禁用缓存,或者至少我不知道如何禁用 代码,我现在有:Php 在USER_INT函数中禁用TYPO3中的缓存,php,caching,typo3,Php,Caching,Typo3,我正在从事一个TYPO3项目,在这个项目中,我必须根据条件动态禁用缓存。这是一个非常具体的用例,不会经常发生 我计划使用一个USER_INT函数,在这里我将执行检查并在必要时禁用缓存。USER_INT函数工作完美,每次加载页面时都会调用它 问题是,我不能禁用缓存,或者至少我不知道如何禁用 代码,我现在有: page = PAGE page { typeNum = 0 adminPanelStyles = 0 11 = USER_INT 11.userFunc =
page = PAGE
page {
typeNum = 0
adminPanelStyles = 0
11 = USER_INT
11.userFunc = [COMPANY_NAMESPACE]\PageHandler->checkCache
在函数中,我执行检查:
public function checkCache($content,$conf){
global $TSFE;
$id = $TSFE->id;
if($this->checkIfDisableCache($id)){
//$TSFE->set_no_cache(); // <---- first I tried this one
$TSFE->no_cache=true; // <-----after a while I got despoerate and tried to disable it directly
}
}
它可以工作,但是由于检查相当复杂,我想使用PHP来确定是否应该禁用缓存
我知道我做错了什么,我只是不知道是什么。欢迎提供任何帮助:)如果您查看pibase(AbstractPlugin)代码,您将看到应该设置$conf['useCacheHash']
和$conf['no_cache']
如果您查看pibase(AbstractPlugin)代码,您将看到可能需要设置$conf['useCacheHash']
和$conf['no_cache']
如果将此对象创建为USER\u INT,则它将在主页呈现之外以非缓存方式呈现。
如果将此对象创建为USER\u INT,则它将在主页呈现之外以非缓存方式呈现。
我认为前面的两个答案都不能真正解释这种情况。这里有一个catch-22,在生成页面缓存条目之后执行
USER\u INT
。它在内部工作的方式是首先呈现所有可以缓存的内容,然后每个USER\u INT
在HTML源中输出一个标记,该标记随后被替换。这样,缓存可以包含带有标记的版本,并且可以在不必渲染整个页面的情况下渲染这些标记
因此,如果您希望仅在某些情况下禁用页面缓存,那么在这种情况下需要做的是使用自定义打字脚本条件,该条件只能在特殊情况下设置config.no_cache=1
。这样,在满足条件的情况下可以防止生成缓存项,但可以为每个其他请求保留完全缓存和缓存输出
请注意,仍然建议您创建页面中不能缓存的部分,如
USER\u INT
对象。在某些情况下需要禁用整个页面缓存的用例表明可能误解了缓存框架和/或USER\u INT
的工作方式。希望上面能解释一下这些部分。我认为前面的答案都不能真正解释这种情况。这里有一个catch-22,在生成页面缓存条目之后执行USER\u INT
。它在内部工作的方式是首先呈现所有可以缓存的内容,然后每个USER\u INT
在HTML源中输出一个标记,该标记随后被替换。这样,缓存可以包含带有标记的版本,并且可以在不必渲染整个页面的情况下渲染这些标记
因此,如果您希望仅在某些情况下禁用页面缓存,那么在这种情况下需要做的是使用自定义打字脚本条件,该条件只能在特殊情况下设置config.no_cache=1
。这样,在满足条件的情况下可以防止生成缓存项,但可以为每个其他请求保留完全缓存和缓存输出
请注意,仍然建议您创建页面中不能缓存的部分,如
USER\u INT
对象。在某些情况下需要禁用整个页面缓存的用例表明可能误解了缓存框架和/或USER\u INT
的工作方式。希望上面能解释一下这些部分。谢谢你提供的信息,我现在正在查看。我不知道这是否会起作用,因为我们谈论的是一个USER_INT函数,这意味着它在控制器之外执行(我认为可能是错误的)。谢谢你提供的信息,我现在正在检查它。我不知道这是否会起作用,因为我们讨论的是一个USER_INT函数,这意味着它在控制器之外执行(我认为可能是错误的)
config.no_cache = 1