Typo3 v9.5.5 ,PHP 7.2 。缓存已清除,缓存已关闭,开发环境。我的扩展程序已将 requireCHashArgumentForActionArguments
设置为0。
我使用以下语法生成指向动作的链接:
<f:link.action action="test" noCacheHash="1"></f:link.action>
很遗憾, cHash
自变量始终出现在返回的URL中。这破坏了扩展程序的逻辑,因为在通过ajax请求调用操作之前,我在JavaScript代码中向URL添加了额外的属性。
我期望noCacheHash
参数会导致从网址中删除cHash
参数。
我希望设置requireCHashArgumentForActionArguments
可以防止任何URL验证问题,即使URL中存在cHash
。
我知道cHashExcludedParameters
的配置设置,但我通常希望为自己的扩展程序关闭cHash
。
所以,我需要帮助或解释。
编辑:如果我从网址中手动删除了chash
参数并调用了该参数,则请求将成功处理。因此,这意味着requireCHashArgumentForActionArguments
可以很好地处理,但是只有当URL中不存在chash
时。
编辑2:
在我的情况下,无效的cHash导致调用pageNotFoundOnCHashError
处理程序。我在$GLOBALS['TYPO3_CONF_VARS']['FE']['pageNotFoundOnCHashError'] = false;
中设置了AdditionalConfiguration.php
,它“解决了”一个问题(不是很好的解决方法)。
答案 0 :(得分:1)
您需要创建自己的带有属性的RouteEnhancer,以删除URL中的cHash。这里RoutingEnhancersAndAspects是一些很好的例子。
您的config.yaml
可能看起来像这样:
ProductDetail:
type: Extbase
limitToPages: [your_PageId]
extension: YourExtPlaceholder
plugin: Pi1
routes:
- { routePath: '/{product_title}', _controller: 'Product::detail', _arguments: {'product_title': 'product'} }
defaultController: 'Product::detail'
defaults:
page: '0'
requirements:
page: '\d+'
aspects:
product_title:
type: PersistedAliasMapper
tableName: tx_yourext_domain_model_product
routeFieldName: slug