TYPO3.CMS 9 LTS - 可缓存的 extbase 操作但没有新路由的 cHash
TYPO3.CMS 9 LTS - cacheable extbase action but no cHash with new routing
知道如何解决这个问题吗?我有一个 extbase 插件,它有一个列表和一个显示操作。两者都应该是可缓存的,并且详细信息 link 不应包含缓存哈希
我做不到。一旦我启用缓存,我总是会得到相同的细节操作结果。
我将插件配置为可缓存:
// add detail plugin
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'Vendor.Extension',
'SomePiName',
[
'ControllerName' => 'show',
],
[],
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT
);
路由配置:
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
我的自定义方面通过将外部 uuid 映射到生成的 slug 上来工作,该 slug 存储在我维护的 mysql-table 中。
我想要一个深link喜欢:
/path/to/page/show/here-comes-the-slug
但是我明白了
/path/to/page/show/here-comes-the-slug?cHash=...
所以我补充说:
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = "tx_extension_somepiname[uuid]";
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = "tx_extension_somepiname[controller]";
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = "tx_extension_somepiname[action]";
现在 link 看起来像:
/path/to/page/show/here-comes-the-slug
但是一旦我激活缓存,我总是得到相同的结果。
所以我需要缓存哈希计算,但我不希望 fu**er 在 link...
链接是使用 ContentObjectRenderer->typolink_URL 和配置生成的:
[
"parameter" => "t3://myhandler?uuid=someuuid"
]
该处理程序转换为对 ContentObjectRenderer->typolink_URL 的后续调用,配置为:
[
"parameter" => "t3://page?uid=someconfiguredpageuid",
"useCacheHash" => 0,
"additionalParams" => "&tx_extension_somepiname[uuid]=uuid&tx_extension_somepiname[controller]=Controller&tx_extension_somepiname[action]=show"
]
所以我的情况是,我既可以有一个 cacheHash 和一个正确的结果,也可以没有一个有无效结果的 cacheHash。
这是怎么做的?
您不应排除实际区分页面内容和 cHash 生成的参数。它们真的只有在与 fbclid
等
等外部跟踪参数一起使用时才能正常使用
如果您依赖缓存,也不要使用 useCacheHash=0。
而是配置路由增强器以删除 ?cHash
。
好的,我解决了这个问题,这里是必要的步骤:
1) 正如 Jonas Eberle 建议的那样,我们从 excludedParameters 中删除了 extbase 参数。
2) 将详细操作配置为可缓存(从 extbase 插件注册中的第二个可能操作数组中删除控制器->操作组合/ext_localconf.php)
3) 使用自定义方面时,实现"StaticMappableAspectInterface"。我没有在核心中找到相关部分,但似乎需要这个接口!看看 PersistedAliasMapper。
现在可以了...
知道如何解决这个问题吗?我有一个 extbase 插件,它有一个列表和一个显示操作。两者都应该是可缓存的,并且详细信息 link 不应包含缓存哈希
我做不到。一旦我启用缓存,我总是会得到相同的细节操作结果。
我将插件配置为可缓存:
// add detail plugin
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'Vendor.Extension',
'SomePiName',
[
'ControllerName' => 'show',
],
[],
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT
);
路由配置:
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
我的自定义方面通过将外部 uuid 映射到生成的 slug 上来工作,该 slug 存储在我维护的 mysql-table 中。
我想要一个深link喜欢:
/path/to/page/show/here-comes-the-slug
但是我明白了
/path/to/page/show/here-comes-the-slug?cHash=...
所以我补充说:
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = "tx_extension_somepiname[uuid]";
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = "tx_extension_somepiname[controller]";
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = "tx_extension_somepiname[action]";
现在 link 看起来像:
/path/to/page/show/here-comes-the-slug
但是一旦我激活缓存,我总是得到相同的结果。
所以我需要缓存哈希计算,但我不希望 fu**er 在 link...
链接是使用 ContentObjectRenderer->typolink_URL 和配置生成的:
[
"parameter" => "t3://myhandler?uuid=someuuid"
]
该处理程序转换为对 ContentObjectRenderer->typolink_URL 的后续调用,配置为:
[
"parameter" => "t3://page?uid=someconfiguredpageuid",
"useCacheHash" => 0,
"additionalParams" => "&tx_extension_somepiname[uuid]=uuid&tx_extension_somepiname[controller]=Controller&tx_extension_somepiname[action]=show"
]
所以我的情况是,我既可以有一个 cacheHash 和一个正确的结果,也可以没有一个有无效结果的 cacheHash。
这是怎么做的?
您不应排除实际区分页面内容和 cHash 生成的参数。它们真的只有在与 fbclid
等
如果您依赖缓存,也不要使用 useCacheHash=0。
而是配置路由增强器以删除 ?cHash
。
好的,我解决了这个问题,这里是必要的步骤:
1) 正如 Jonas Eberle 建议的那样,我们从 excludedParameters 中删除了 extbase 参数。
2) 将详细操作配置为可缓存(从 extbase 插件注册中的第二个可能操作数组中删除控制器->操作组合/ext_localconf.php)
3) 使用自定义方面时,实现"StaticMappableAspectInterface"。我没有在核心中找到相关部分,但似乎需要这个接口!看看 PersistedAliasMapper。
现在可以了...