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

3

我正在处理一份TYPO3网站,出现了路由系统的问题。

我有一个基于通过ElasticSearch查询得到的数据的扩展程序。这些数据包含一个名为“永久链接”的字段,对于此索引中的每个记录都是唯一的。我希望根据此字段创建一条路由。

如果我做以下操作:

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

它确实可以工作,但由于 Typo 无法将 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 操作中会出现参数为空的错误。
1个回答

1

好的,我很愚蠢。Permalink是ElasticSearch中的字段名称,但我的操作控制器正在等待一个"idEvent"参数。这就是为什么它是空的......对此造成的不便表示抱歉。

所以为了澄清我的做法:我用自定义方面来欺骗Typo。通常它的作用是通过向控制器发送正确的信息来检查记录是否唯一。在我的情况下,我知道每条记录都是唯一的(因为我的唯一标识是由Elastic生成的)。所以我所做的唯一的事情就是发送回id,以便控制器可以执行它的任务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接