生成带有noCacheHash = true参数的操作链接无法按预期运行

时间:2019-03-14 09:17:34

标签: typo3 typo3-extensions typo3-9.x

从8.7升级后,

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,它“解决了”一个问题(不是很好的解决方法)。

1 个答案:

答案 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