如何使用自定义映射器 TYPO3 9.5 从 URL 中隐藏参数?

问题描述

以前我没有实现自定义映射器的 URL 如下所示: https:\mydomain.com?tx_myextension%5Baction%5D=boat-action&tx_myextension%5BboatId%5D=boat-id&tx_myextension%5BboatName%5D=boat-name&tx_myextension%5Bcontroller%5D=boat-controller&cHash=hash

在通过扩展自定义方面实现自定义 URL 映射器之后,我达到了这个解决方案: https:\mydomain.com/boat-name/boat-id

我想要实现的是从 URL 中隐藏 boat-id,该 ID 未存储在表中,并且需要从页面加载数据。

生成链接的Html

<f:link.action  
    class="call-to-action horizontal" 
    action=“boat-action” 
    controller=“boat-controller”
    arguments="{
        boatId: '{boat.id}',boatName: '{boat.urlName}'
    }" 
    pageUid="218"
>

config.yaml

routeEnhancers:
    BoatName:
      type: Extbase
      limitToPages:
        - 218
      extension: myextension
      plugin: Singleboat
      routes:
        - routePath: '/{boatName}/{boatId}'
          _controller: Boat::boat-controller
      aspects:
        boatId:
          type: BoatNameMapper
        boatName:
          type: BoatNameMapper

自定义映射器类

class BoatNameMapper 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 中输入你的船 ID,不要把它放进去。(config.yaml)

特别是:让您的控制器独立于船 ID。否则,您需要在 URL 中使用它。


也许可以接受的解决方案是另一种船名和船 ID。

关于:- routePath: '/{boatName}-{boatId}