【问题标题】:TYPO3.CMS 9 LTS - cacheable extbase action but no cHash with new routingTYPO3.CMS 9 LTS - 可缓存的 extbase 操作,但没有新路由的 cHash
【发布时间】:2020-01-08 10:34:13
【问题描述】:

知道如何解决这个问题吗?我有一个 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。

这是怎么做的?

【问题讨论】:

  • 你能解释/展示customType到底做了什么吗?
  • 它实现了 PersistedMappableAspectInterface,使用 SiteLanguageAwareTrait 并将 uuid 转换为 slug。 uuid 和标题(我从中生成 slug)都存储在外部 api 中。 generate 方法将 uuid 转换为 slug,而 reslove 方法将 slug 转换回 uuid

标签: php typo3 url-routing typo3-9.x


【解决方案1】:

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

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

而是配置路由增强器来移除?cHash

【讨论】:

    【解决方案2】:

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

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

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

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

    现在可以了……

    【讨论】:

    • 是否可以在 customAspect 中进行调试?我创建了一个 customAspect ,但调试不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多