TYPO3 路由:自定义方面如何工作?

TYPO3 Routing : how does Custom Aspect works?

我在 TYPO3 网站上工作,我遇到了路由系统问题。

我有一个基于我通过 ElasticSearch 查询的数据的扩展。这些数据包含一个名为“永久链接”的字段,它对于该索引中的每条记录都是唯一的。我想要一个包含这个字段的路由。

如果我这样做:

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

它确实有效,但由于拼写错误无法将 URL 解析为唯一,因此它在其中添加了 cHash,我不希望这样。我尝试禁用该字段的 cHash 生成,但如果我从一个事件转到另一个事件,我会遇到问题(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;
    }
}

如果我让此映射器处于此状态,我会在 Show 操作中收到一个错误,指出参数为空。

好吧,我只是愚蠢。 永久链接是 ElasticSearch 中字段的名称,但我的操作控制器正在等待 "idEvent" 参数。这就是它为空的原因...对于给您带来的不便,我们深表歉意。

所以澄清一下我的工作:我有点用我的自定义方面愚弄了 Typo。通常它的目的是通过向控制器发送正确的信息来检查记录是否是唯一的。就我而言,我知道每条记录都是唯一的(因为我的唯一 ID 是由 Elastic 生成的)。所以我唯一要做的就是发回 id,这样控制器就可以做它的事情了。