gpt4 book ai didi

typo3 - 升级到TYPO3 v9.5.14后路由异常

转载 作者:行者123 更新时间:2023-12-03 22:00:10 31 4
gpt4 key购买 nike

升级到 TYPO3 v9.5.14 后,我们的新闻详情页面崩溃了

Symfony\Component\Routing\Exception\InvalidParameterException

Parameter "p88bd715a41119d0e8087a5d19cb049" for route "tx_news_pi1_1" must match "[^/]++" ("" given) to generate a corresponding URL.



这是怎么回事?

该站点使用此配置:
  NewsTagPlugin:
type: Extbase
limitToPages: [14]
extension: News
plugin: Pi1
routes:
- routePath: '/{tag-name}'
_controller: 'News::list'
_arguments:
tag-name: 'overwriteDemand/tags'
- routePath: '/{tag-name}/page/{page}'
_controller: 'News::list'
_arguments:
tag-name: 'overwriteDemand/tags'
page: '@widget_0/currentPage'
requirements:
page: '\d+'
defaultController: 'News::list'
defaults:
page: ''
aspects:
page:
type: IntegerMapper
start: 1
end: 5000
tag-name:
type: PersistedAliasMapper
tableName: tx_news_domain_model_tag
routeFieldName: slug

最佳答案

1) 多余的映射

  NewsTagPlugin:
...
routes:
...
- routePath: '/{tag-name}/page/{page}'
_controller: 'News::list'
_arguments:
tag-name: 'overwriteDemand/tags'
page: '@widget_0/currentPage'
requirements:
page: '\d+'
  • _arguments定义路由参数和内部变量的映射(例如作为查询参数`
  • requirements这里是错误的,因为它不能用作参数映射
  • 参数 requirements需要在 NewsTagPlugin 的根级别定义

  • 2) 无效的空默认值
      NewsTagPlugin:
    ...
    routes:
    ...
    - routePath: '/{tag-name}/page/{page}'
    ...
    defaults:
    page: ''
    aspects:
    ...
  • defaults在 TYPO3 v9.5.14 之前未应用并在 https://review.typo3.org/c/Packages/TYPO3.CMS/+/60361 中解决
  • 参数 page 的空默认值没有多大意义,会导致 URL 像 /some-tag/page/这导致了答案
  • 中显示的错误消息
  • 默认值应该是 page: 1
  • 如果 URL 中的参数应该被省略(例如,有 /some-tag/page/),这需要使用 {!page} 明确定义在路由路径中

  • 引用
  • https://symfony.com/doc/4.3/routing.html#optional-parameters
  • https://docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/9.5.x/Important-86895-RouteAspectsTakePrecedenceOverRequirements.html

  • 调整后的增强器配置
      NewsTagPlugin:
    type: Extbase
    limitToPages: [14]
    extension: News
    plugin: Pi1
    routes:
    - routePath: '/{tag-name}'
    _controller: 'News::list'
    _arguments:
    tag-name: 'overwriteDemand/tags'
    - routePath: '/{tag-name}/page/{!page}'
    _controller: 'News::list'
    _arguments:
    tag-name: 'overwriteDemand/tags'
    page: '@widget_0/currentPage'
    defaultController: 'News::list'
    defaults:
    page: 1
    aspects:
    page:
    type: IntegerMapper
    start: 1
    end: 5000
    tag-name:
    type: PersistedAliasMapper
    tableName: tx_news_domain_model_tag
    routeFieldName: slug
  • (未经测试)自 IntegerMapper似乎是一个自定义方面的实现 - 不向公众开放
  • 关于typo3 - 升级到TYPO3 v9.5.14后路由异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60282463/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com