Typo3 Routing: как работает Custom Aspect? - PullRequest
2 голосов
/ 10 марта 2020

Я работаю над сайтом Typo3, и у меня проблема с системой маршрутизации.

У меня есть расширение, основанное на данных, которые я запрашиваю через ElasticSearch. Эти данные содержат поле с именем «постоянная ссылка», оно уникально для каждой записи в этом индексе. Я хочу иметь маршрут с этим полем.

Если я сделаю что-то вроде этого:

Event:
type: Extbase
limitToPages: [155]
extension: ...
plugin: ...
routes:
  -
    routePath: '/{idEvenement}'
    _controller: 'Event::show'
    _arguments:
      idEvenement: permalink

Это работает, но так как Typo не может разрешить URL как уникальный, он добавляет cHa sh и я этого не хочу. Я попытался отключить генерацию cHa sh для этого поля, но у меня возникают проблемы, если я go переходит от одного события к другому (URL-адрес изменяется, но не его содержимое, пока я не очищаю передний кэш).

Я пытался использовать собственный картограф аспекта, но нет никакой документации вообще, и я не знаю, как это работает. Мой маршрут должен стать таким (я думаю):

Event:
type: Extbase
limitToPages: [155]
extension: ...
plugin: ...
routes:
  -
    routePath: '/{idEvenement}'
    _controller: 'Event::show'
    _arguments:
      idEvenement: permalink
aspects:
  idEvenement:
    type: EventMapper

Мой EventMapper в настоящее время таков:

<?php

namespace Vendor\Extension\Routing\Aspect;

use TYPO3\CMS\Core\Routing\Aspect\StaticMappableAspectInterface;
use TYPO3\CMS\Core\Site\SiteLanguageAwareTrait;

class EventMapper implements StaticMappableAspectInterface
{
    use SiteLanguageAwareTrait;

    /**
     * {@inheritdoc}
     */
    public function generate(string $value): ?string
    {
        return $value;
    }

    /**
     * {@inheritdoc}
     */
    public function resolve(string $value): ?string
    {
        return isset($value) ? (string)$value : null;
    }
}

Если я позволю этому преобразователю в этом состоянии, я получу ошибку в моем шоу действие, говорящее, что параметр является нулем.

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 10 марта 2020

Хорошо, я просто тупой. Постоянная ссылка - это имя поля в ElasticSearch, но мой контроллер действий ожидает параметр "idEvent". Вот почему он нулевой ... Извините за неудобства.

Итак, чтобы уточнить, что я делаю: я несколько обманываю Typo своим собственным аспектом. Обычно его целью является проверка уникальности записи путем отправки правильной информации контроллеру. В моем случае я точно знаю, что каждая запись уникальна (потому что мой уникальный идентификатор генерируется Elasti c). Поэтому единственное, что я делаю, это отправляю обратно идентификатор, чтобы контроллер мог делать свое дело.

...