Создание ссылки на действие с аргументом noCacheHash = true не работает должным образом

Typo3 v9.5.5, PHP 7.2, после обновления с 8.7. Кеш очищен, кеш отключен, среда разработки. У моего расширения requireCHashArgumentForActionArguments установлено 0.

Я создаю ссылки на действия, используя синтаксис, как показано ниже:

<f:link.action action="test" noCacheHash="1"></f:link.action>

К сожалению, cHash аргумент всегда присутствует в возвращаемом URL. Это нарушает логику моего расширения, поскольку я добавляю дополнительные атрибуты в URL в моем коде JavaScript перед вызовом действия через запрос ajax.

Я ожидал, что noCacheHash аргумент приведет к удалению cHash аргумента из URL.

Я ожидал, что настройка requireCHashArgumentForActionArguments предотвратит любые проблемы с проверкой URL, даже если cHash присутствует в URL.

Мне известно о cHashExcludedParameters настройке конфигурации, но я хотел бы отключить cHash для своего расширения в целом.

Итак, я прошу помощи или объяснения.

Изменить: если я вручную удалю chash аргумент из URL и вызываю его, запрос будет обработан успешно. Итак, это означает, что requireCHashArgumentForActionArguments обрабатывается нормально, но только когда chash отсутствует в URL-адресе.

Изменить 2:

В моем случае неверный cHash вызвал вызов pageNotFoundOnCHashError обработчика. Я установил $GLOBALS['TYPO3_CONF_VARS']['FE']['pageNotFoundOnCHashError'] = false; в AdditionalConfiguration.php, и он «решил» проблему (не изящное исправление).


person qba-dev    schedule 14.03.2019    source источник
comment
На самом деле этого уже нет в docs v8 .typo3.org / typo3cms / extensions / core / latest / Changelog / 8.5 /   -  person M Klein    schedule 14.03.2019
comment
@MKlein, в документации говорится, что это можно отключить: поведение можно отключить для всех действий с помощью переключателя функции requireCHashArgumentForActionArguments.   -  person qba-dev    schedule 14.03.2019
comment
Я могу предложить только одно решение для вас: если вы уже возитесь с параметрами GET в JS, просто нажмите и значение chash, и все готово. Имейте в виду: любой запрос, у которого нет допустимого параметра cHash, не будет кэшироваться ядром, что может быть основной проблемой производительности!   -  person M Klein    schedule 14.03.2019
comment
Я имел это в виду, но это не элегантный и гибкий подход, так как мне всегда приходилось помнить об удалении ручного мусора при добавлении нового запроса ajax в приложение JS. Мне известно о проблемах с преформой без кеша в Typo3. Спасибо за ваши комментарии и предложения.   -  person qba-dev    schedule 14.03.2019


Ответы (1)


Вам необходимо создать свой собственный RouteEnhancer с атрибутами для удаления cHash в URL. Здесь 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
person ChrisKr    schedule 15.03.2019