我正在处理一份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 操作中会出现参数为空的错误。