Мне нужен настраиваемый класс сопоставления аспектов, чтобы определить значение необязательного параметра get. этот параметр содержит идентификатор cf_cache с дополнительными данными. Но этот параметр создает параметр cHash, который мне не нужен и не хочу видеть в URL-адресах.
В документах (https://docs.typo3.org/typo3cms/extensions/core/Changelog/9.5/Feature-86365-RoutingEnhancersAndAspects.html) говорится:
If the requirements are too loose, a URL signature parameter ("cHash") is added to the end of the URL which cannot be removed.
А также:
If you really have the requirement to never have a cHash argument, ensure that all placeholders are having strict definitions on what could be the result of the page segment (e.g. pagination), and feel free to build custom mappers.
Описание функции объясняет только, как зарегистрировать собственный класс улучшения в ext_tables.php, но не как использовать собственные преобразователи аспектов :-(
С удовольствием, но как?
Решение простое, но, похоже, документация неверна. Согласно документации, пользовательский Enhancer должен быть зарегистрирован в ext_tables.php с помощью $ GLOBALS ['TYPO3_CONF_VARS'] ['SYS'] ['routing'] ['CustomPlugin'].
ОБНОВИТЬ
If the mapper is registered in the ext_tables.php, it only works if you are logged in to the TYPO3 BE. The mapper must seem to be registered in the ext_localconf.php. Then it works without being logged in to the BE
Взгляд в массив $ GLOBALS ['TYPO3_CONF_VARS'] ['SYS'] ['routing'] показывает, где зарегистрированы аспекты и усилители:
Зарегистрируйте маппер в ext_tables.php:
// Custom Routing Aspects Mapper
$GLOBALS['TYPO3_CONF_VARS']['SYS']['routing']['aspects']['IdentifierValueMapper'] = \VENDOR\Extension\Routing\Aspect\IdentifierValueMapper::class;
Класс аспектов:
<?php
namespace VENDOR\Extension\Routing\Aspect;
use TYPO3\CMS\Core\Routing\Aspect\StaticMappableAspectInterface;
use TYPO3\CMS\Core\Site\SiteLanguageAwareTrait;
class IdentifierValueMapper implements StaticMappableAspectInterface
{
use SiteLanguageAwareTrait;
/**
* {@inheritdoc}
*/
public function generate(string $value): ?string
{
...
return $value !== false ? (string)$value : null;
}
/**
* {@inheritdoc}
*/
public function resolve(string $value): ?string
{
...
return isset($value) ? (string)$value : null;
}
}
Без настраиваемого сопоставителя мой URL-адрес всегда имеет (в моем случае абсолютно бесполезный / только уродливый) атрибут TYPO3 cHash:
/page/2/price/asc/03510890954e251e285104f156298e55952e4c7d?cHash=dd66994f041278f4c6bf2f7f64fb09e4
Теперь у меня есть URL без cHash:
/page/3/price/asc/ae636e66563e72d3e4f592173f328fecbee5e44f
Регистрацию настраиваемого преобразователя аспектов необходимо выполнить в ext_localconf.php
. Ссылка
У меня также проблема с тем, что мои ссылки содержат параметр cHash. Я реализовал собственный «Enhancer», а теперь также попытался реализовать собственный «Mapper». Но у меня остались параметры "cHash". Что бы я ни делал, это не работает. Могу ли я увидеть ваш полный код где-нибудь в настраиваемом картографе? Спасибо
Привет, Клаус, вы можете найти здесь код: gitlab.com/exotec/cardealer/-/tree/master/Classes/Routing/…
(TYPO3 9.5.8): регистрация Картограф пользовательских аспектов маршрутизации в
ext_tables.php
(как предлагается в настоящее время), похоже, делает этот преобразователь аспектов доступным только для авторизованных (т. Е. Backend) пользователей. Открытие маршрута с этим настраиваемым аспектом от имени не вошедшего в систему пользователя (например, на вкладке инкогнито) приведет к тому, что TYPO выдаст исключение «аспект не найден». Я решил эту проблему, зарегистрировав аспект в моемAdditionalConfiguration.php
. Это концептуально идентично тому, как это делает ядро TYPO: github.com/TYPO3/TYPO3.CMS/blob/v9.5.8/typo3/sysext/core/…