Как написать преобразователь аспектов маршрутизации для TYPO3 9 LTS

Мне нужен настраиваемый класс сопоставления аспектов, чтобы определить значение необязательного параметра 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, но не как использовать собственные преобразователи аспектов :-(

С удовольствием, но как?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
2 324
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решение простое, но, похоже, документация неверна. Согласно документации, пользовательский 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

(TYPO3 9.5.8): регистрация Картограф пользовательских аспектов маршрутизации в ext_tables.php (как предлагается в настоящее время), похоже, делает этот преобразователь аспектов доступным только для авторизованных (т. Е. Backend) пользователей. Открытие маршрута с этим настраиваемым аспектом от имени не вошедшего в систему пользователя (например, на вкладке инкогнито) приведет к тому, что TYPO выдаст исключение «аспект не найден». Я решил эту проблему, зарегистрировав аспект в моем AdditionalConfiguration.php. Это концептуально идентично тому, как это делает ядро ​​TYPO: github.com/TYPO3/TYPO3.CMS/blob/v9.5.8/typo3/sysext/core/…

Abdull 17.07.2019 12:24

Регистрацию настраиваемого преобразователя аспектов необходимо выполнить в ext_localconf.php. Ссылка

chris 10.09.2020 18:09

У меня также проблема с тем, что мои ссылки содержат параметр cHash. Я реализовал собственный «Enhancer», а теперь также попытался реализовать собственный «Mapper». Но у меня остались параметры "cHash". Что бы я ни делал, это не работает. Могу ли я увидеть ваш полный код где-нибудь в настраиваемом картографе? Спасибо

Klaus 28.04.2021 14:32

Привет, Клаус, вы можете найти здесь код: gitlab.com/exotec/cardealer/-/tree/master/Classes/Routing/…

exotec 30.04.2021 12:14

Другие вопросы по теме