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:link
或 typolink
)并且您的路由配置正确,则会附加正确的 ?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 错误。但是,如果您像此处建议的那样对待参数,我认为您将来是安全的。
我需要向 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:link
或 typolink
)并且您的路由配置正确,则会附加正确的 ?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 错误。但是,如果您像此处建议的那样对待参数,我认为您将来是安全的。