Php TYPO3.CMS 9 LTS-可缓存extbase操作,但没有新路由的漏洞
你知道怎么解决这个问题吗?我有一个extbase插件,它有一个列表和一个显示动作。两者都应该是可缓存的,并且详细信息链接不应该包含缓存哈希 我不能做到这一点。一旦我启用缓存,我总是会得到与细节操作相同的结果 我将插件配置为可缓存:Php TYPO3.CMS 9 LTS-可缓存extbase操作,但没有新路由的漏洞,php,typo3,url-routing,typo3-9.x,Php,Typo3,Url Routing,Typo3 9.x,你知道怎么解决这个问题吗?我有一个extbase插件,它有一个列表和一个显示动作。两者都应该是可缓存的,并且详细信息链接不应该包含缓存哈希 我不能做到这一点。一旦我启用缓存,我总是会得到与细节操作相同的结果 我将插件配置为可缓存: //添加详细插件 \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( “Vendor.Extension”, “SomePiName”, [ “控制器名称”=>“显示”, ], [], \TYPO
//添加详细插件
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
“Vendor.Extension”,
“SomePiName”,
[
“控制器名称”=>“显示”,
],
[],
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::PLUGIN\u TYPE\u CONTENT\u元素
);
路由配置:
routeEnhancers:
MyEnhanceName:
type: Extbase
extension: Extension
plugin: SomePiName
routes:
- { routePath: '/{localized_entry}/{slug}', _controller: 'ControllerName::show', _arguments: {'slug': 'uuid'} }
defaultController: 'ControllerName::show'
aspects:
localized_entry:
type: LocaleModifier
default: 'show'
localeMap:
- locale: 'de_DE.*|de_AT.*|de_CH.*'
value: 'detail'
- locale: 'it_IT.*'
value: 'dettaglio'
slug:
type: customType
我的自定义特性通过在生成的slug上映射外部uuid来工作,该slug存储在我维护的mysql表中
我想要一个像这样的深度链接:
/path/to/page/show/子弹来了
但我明白了
/path/to/page/show/鼻涕虫来了?cHash=…
所以我补充说:
$GLOBALS['TYPO3\u CONF\u VARS']['FE']['cacheHash']['excludedParameters'][][][][]=“tx\u扩展名\u somepiname[uuid]”;
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][]=“tx_extension_somepiname[controller]”;
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][]=“tx_extension_somepiname[action]”;
现在链接看起来像:
/path/to/page/show/子弹来了
但一旦我激活缓存,我总是得到同样的结果
所以我需要一个缓存散列计算,但我不希望服务器在链接中
使用ContentObjectRenderer->typolink\u URL和配置生成链接:
[
“参数”=>“t3://myhandler?uuid=someuuid”
]
该处理程序转换为对ContentObjectRenderer->typolink\uURL的后续调用,配置为:
[
“参数”=>“t3://page?uid=someconfiguredpageuid”,
“useCacheHash”=>0,
“附加参数”=>“&tx_扩展名\u somepiname[uuid]=uuid&tx_扩展名\u somepiname[controller]=controller&tx_扩展名\u somepiname[action]=显示”
]
所以我的情况是,我可以有一个cacheHash和一个正确的结果,也可以有一个cacheHash和一个无效的结果
这意味着如何实现?您不应该排除实际区分页面内容和裂缝生成的参数。它们只适用于外部跟踪参数,如
fbclid
等
如果依赖缓存,也不要使用useCacheHash=0
而是将路由增强器配置为删除
?cHash
您不应该排除实际区分页面内容和cHash生成的参数。它们只适用于外部跟踪参数,如fbclid
等
如果依赖缓存,也不要使用useCacheHash=0
而是将路由增强器配置为删除
?cHash
好的,我解决了这个问题,下面是必要的步骤:
1) 就像Jonas Eberle建议的那样,我们从excludedParameters中删除extbase参数
2) 将细节操作配置为可缓存(从extbase plugin registration/ext_localconf.php中的第二个可能操作数组中删除控制器->操作组合)
3) 当使用自定义方面时,实现“StaticMapPableLeascentInterface”。我没有在核心中找到相关的部分,但似乎这个接口是必需的!只要看看持久的liasmapper
现在它工作了…好的,我解决了这个问题,这里是必要的步骤: 1) 就像Jonas Eberle建议的那样,我们从excludedParameters中删除extbase参数 2) 将细节操作配置为可缓存(从extbase plugin registration/ext_localconf.php中的第二个可能操作数组中删除控制器->操作组合) 3) 当使用自定义方面时,实现“StaticMapPableLeascentInterface”。我没有在核心中找到相关的部分,但似乎这个接口是必需的!只要看看持久的liasmapper
现在它工作了…你能解释/展示一下
customType
到底做了什么吗?它实现了persistedAppableSpecific接口,使用SiteLanguageAwareTit并将UUID翻译成slug。uuid和标题(我从中生成slug)都存储在外部api中。generate方法将uuid转换为slug,reslove方法将slug转换回uuid您能否解释/展示customType
的具体功能?它实现了PersistedAppableSpecifice接口,使用SiteLanguageAwareTract并将uuid转换为slug。uuid和标题(我从中生成slug)都存储在外部api中。方法generate将uuid转换为slug,方法reslove将slug转换回uuid