Исключение при маршрутизации после обновления до TYPO3 v9.5.14 - PullRequest
2 голосов
/ 18 февраля 2020

После обновления до TYPO3 v9.5.14 наши страницы сведений для новостей cra sh за исключением

Symfony \ Component \ Routing \ Exception \ InvalidParameterException

Параметр "p88bd715a41119d0e8087a5d49cb для маршрута "tx_news_pi1_1" должно совпадать с "[^ /] ++" ("" дано) для генерации соответствующего 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

Ответы [ 2 ]

2 голосов
/ 18 февраля 2020

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 необходимо определить на уровне root 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} в пути маршрута

Ссылки

Настроенная конфигурация усилителя

  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 представляется пользовательской реализацией аспекта - недоступно для публик c
0 голосов
/ 18 февраля 2020

Прежде всего, рассмотрим https://docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/9.5.x/Important-86895-RouteAspectsTakePrecedenceOverRequirements.html

Причиной является конфигурация default для аспекта page. Однажды он был введен для того, чтобы убедиться, что URL для первой страницы тега всегда "/ tag-name", и только на последующих страницах есть "/ tag-name / page / 2" и т. Д.

Это значение по умолчанию Теперь необходимо удалить значение, чтобы требования применялись по желанию.

...