Extbase RouteEnhancer 中的可选参数

Optional argument in Extbase RouteEnhancer

我需要向 url 新闻记录(自己的扩展名)添加一个可选参数。

当前增强器配置:

MyNewsSystem:
type: Extbase
extension: MyNewsSystem
plugin: News
routes:
  -
    _controller: 'News::show'
    routePath: '/detail/{news_title}'
    _arguments:
      news_title: selectedNewsItem
aspects:
  news_title:
    type: PersistedAliasMapper
    tableName: tx_mynewssystem_domain_model_news
    routeFieldName: path_segment

这工作正常并生成以下 url 方案: /detail/title-of-news/

现在我需要在 url 的末尾添加一个可选参数: /detail/title-of-news/?hl=字符串+with+信息 添加此参数将以 404.

结束

是否可以在我的 routeenhancer 中忽略该参数?或者我该如何进行?

您收到 404 Not Found 是因为发生了 cHash 错误。如果您通过 TYPO3 生成 link(例如使用 f:linktypolink)并且您的路由配置正确,则会附加正确的 ?cHash= 参数。

如果您的自定义参数 根本没有更改 HTML 输出,您可以将其添加到 [FE][cacheHash][excludedParameters](在 "Installation-wide settings" 中) .请注意,这意味着此参数的不同值都将进入同一缓存条目。因此,如果您需要对参数做任何事情,您唯一的选择是 JavaScript.

另一种情况很常见,但我会为该情况添加所有条件:

如果您需要根据参数改变HTML输出( 你绝对不想要 ?cHash 你不能让 TYPO3 生成 link ) and 你不能使用 PersistedAliasMapper (因为参数是自由文本,没有绑定到数据库中的任何东西) and 你不能使用其他方面映射器(如 StaticRangeMapper),您唯一的选择是编写自定义方面。

看看这里 https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/Routing/ExtendingRouting.html - 在你的情况下,我会在 \TYPO3\CMS\Core\Routing\Aspect\StaticRangeMapper 中寻找灵感。建议尽可能缩小可能的值(以防止缓存泛滥,cHash 被添加到 TYPO3 的原因),但您将能够摆脱 ?cHash.


为了完整起见:这就是 "should" 的样子。目前缓存与非缓存以及 "route-enhanced" 页面(如您的详细信息页面)与 "pagetree" 页面存在一些不一致,无论是否抛出 cHash 错误。但是,如果您像此处建议的那样对待参数,我认为您将来是安全的。