使用 RouteEnhancers 将两个 GET 参数映射到 speaking URL 将无法正常工作

Mapping of two GET-Parameters to speaking URL with RouteEnhancers won't work correctly

我在使用 TYPO3 网站上的 RouteEnhancers 时遇到了一些问题。

我有两个 GET 参数,我想将其映射到说话 url。我有参数 contrast 和 bigfont。

如果对比度设置为 1,我想将 /kontrast 附加到 url。
如果 bigfont 设置为 1,我想将 /bigfont 附加到 url。
如果两者都设置为 1,则应添加两个 url-段 (/kontrast/bigfont)

我尝试为它们中的每一个配置一个 RouteEnhancer,例如:

Kontrast:
    type: Simple
    routePath: '/{contrast}'
    defaults:
      contrast: '0'
    aspects:
      contrast:
        type: StaticValueMapper
        map:
          kontrastmodus: '1'
  GrosseSchrift:
    type: Simple
    routePath: '/{bigfont}'
    defaults:
      bigfont: '0'
    aspects:
      bigfont:
        type: StaticValueMapper
        map:
          bigfont: '1'

如果两者中只有一个设置为一个(/kontrast 或 /bigfont 附加到 url),则此方法有效。但如果两者都设置为 1,它将再次使用正常的 GET 参数。

所以我尝试在一个 RouteEnhancer 中配置两者:

KontrastGrosseSchrift:
    type: Simple
    routePath: '/{contrast}/{bigfont}'
    defaults:
      bigfont: '0'
      contrast: '0'
    aspects:
      bigfont:
        type: StaticValueMapper
        map:
          bigfont: '1'
      contrast:
        type: StaticValueMapper
        map:
          kontrast: '1'

这仅适用于对比度设置为 1(附加 /kontrast),但 bigfont 根本不起作用。
如果只有 bigfont 设置为 1,它将附加 /0/bigfont(/0 不应该在那里),如果两者都设置为 1,它将附加 /kontrast/bigfont(就像它应该的那样),但在这两种情况下'找不到页面' 抛出错误。

谁能帮我正确配置一下?

提前致谢。

这是不可能的,因为 TYPO3 Core 在构建带有两个 GET 参数的 URL 时永远不会知道应该首先使用哪个。

/my-page/0/1 <- 哪个应该是哪个参数?如果两个参数都是可选的,就会发生这种情况,因此 /my-page/0 会不明确,因为两个值都是可能的。 TYPO3 的路由组件无法确定(在构建 URL 时也是如此)应该是哪个。

当然,完全可以为 TYPO3 构建自定义增强器来满足您的需求。

我猜您甚至在寻找“装饰器”(例如 PageType 装饰器)的概念,它并没有真正绑定到插件或类似的东西,而是 site-wide。所以自定义“装饰器”将是我要说的解决方案。

只是为了完整性:SimpleEnhancer 和 PluginEnhancer 可以处理多个参数,但前提是属性按定义的顺序排列并正确运送。