为了账号安全,请及时绑定邮箱和手机立即绑定

TYPO3.CMS 9 LTS - 可缓存的 extbase 操作,但没有新路由的 cHash

TYPO3.CMS 9 LTS - 可缓存的 extbase 操作,但没有新路由的 cHash

PHP
温温酱 2022-07-16 16:51:50
知道如何解决这个问题吗?我有一个 extbase 插件,它有一个列表和一个显示操作。两者都应该是可缓存的,并且详细链接不应包含缓存哈希我无法做到这一点。一旦我启用缓存,我总是会得到相同的细节操作结果。我将插件配置为可缓存:// 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 表中。我想要一个深层链接,例如:/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]";现在链接看起来像:/path/to/page/show/here-comes-the-slug但是一旦我激活缓存,我总是会得到相同的结果。所以我需要一个缓存哈希计算,但我不希望 fu**er 出现在链接中......使用 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。这是怎么做的?
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

您不应排除实际将页面内容与 cHash 生成区分开来的参数。它们真的只能与外部跟踪参数fbclid等一起使用。

如果您依赖缓存,也不要使用 useCacheHash=0 。

而是配置路由增强器以删除?cHash.


查看完整回答
反对 回复 2022-07-16
?
富国沪深

TA贡献1790条经验 获得超9个赞

好的,我解决了这个问题,这里是必要的步骤:

1) 就像 Jonas Eberle 建议的那样,我们从 excludeParameters 中删除 extbase 参数。

2) 将详细信息操作配置为可缓存(从 extbase 插件注册/ext_localconf.php 中的第二个可能操作数组中删除控制器->操作组合)

3) 使用自定义方面时,实现“StaticMappableAspectInterface”。我没有在核心中找到相关部分,但似乎需要这个接口!看看 PersistedAliasMapper。

现在它工作...


查看完整回答
反对 回复 2022-07-16
  • 2 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号