Routes TYPO3 9.5:将自定义路径段放在语言/路由增强器之后

Routes TYPO3 9.5:将自定义路径段放在语言/路由增强器之后,routes,migration,typo3,typo3-9.x,realurl,Routes,Migration,Typo3,Typo3 9.x,Realurl,将3.8.7迁移到9.5我需要替换旧的realurl配置以匹配新的路由: 旧Realurl配置:语言后国家/地区的自定义段: 'preVars' => array( array( 'GETvar' => 'L', 'valueMap' => array( 'en' => '0', // darf nicht auskommentiert sein!

将3.8.7迁移到9.5我需要替换旧的realurl配置以匹配新的路由:

旧Realurl配置:语言后国家/地区的自定义段:

'preVars' => array(
        array(
            'GETvar' => 'L',
            'valueMap' => array(
                'en' => '0', // darf nicht auskommentiert sein!
                'de' => '1',
                'pl' => '2',
                ...

        array(
            'GETvar' => 'C',
            'valueMap' => array(
                'de'=>'1',
                'ch'=>'2',
                'ch'=>'3',      
我尝试了简单的路由增强器inTYPO3 9.5站点配置:

languages:
  -
    title: English
    enabled: true
    languageId: 0
    base: /en/
    typo3Language: default
    locale: en_US.UTF-8
    iso-639-1: en
    navigationTitle: English
    hreflang: en-us
    direction: ltr
    flag: us
  -
    title: German
    enabled: true
    base: /de/
    typo3Language: de
    locale: de_DE.UTF-8
    iso-639-1: de
    navigationTitle: ''
    hreflang: ''
    direction: ''
    fallbackType: fallback
    fallbacks: ''
    flag: de
    languageId: '1'
rootPageId: 1
routes: {  }
routeEnhancers:
  Country:
    type: Simple
    routePath: '/{Country}'
    defaults:
    requirements:
      C: '[1-21]'
    aspects:
      Country:
        type: StaticValueMapper
        map:             
          de: 1
          ch: 2
但国家部分不会出现在语言和主要语言之间: 旧网址: www.mydomain.com/de/ch/home/

使用上面的路由增强配置: www.mydomain.com/de/home/ch/

有人知道我如何获得这个自定义片段并让它出现在正确的位置吗


非常感谢您提供的任何提示

路由增强器会在页面URL之后添加一些内容。然而,我们有一个类似的场景。以下是我必须做的事情,以使其发挥作用:

找到正确的链接: 1.解析传入页面请求 解析语言后构建自定义中间件,并且PSR-15中间件中的PSR-7请求中提供SiteRouterResult 然后,该中间件获取SiteRouteResult的尾部,并基于给定的静态列表解析参数,就像列表中可用的一样。之后,我创建了一个新的SiteRouteResult对象,并从尾部删除了该pathSegment。 请记住,将已解析的参数存储为页面的变量可能非常有用,因此,可以有效地连接到TSFE,在TSFE中,createHashBase的构建也是为了在该变量中进行计算

我建议将此字符串作为自定义属性或自定义TSFE属性存储在请求中

无法使用RouteEnhancer解析prePathVar,因为只有在找到页面后才选择正确的路由增强器。如果您的URL有/ch/home TYPO3页面路由器无法找到正确的页面

2.使用&c查询参数创建链接 创建一个类似于装饰器的RouteEnhancer请参见页面类型增强器。但是,decorator不需要取消装饰/解析URL,也不需要什么都不做。 如果您还使用PageTypeDecorator,这会变得很棘手,因为您只能有一个,因此如果您还需要映射typeNums,那么您可能需要从Core扩展这个

在任何情况下,自定义增强器都可以在生成的路由前面加上静态映射,具体取决于是否给定了类型


希望有帮助

非常感谢!这使我对必须做的事情有了一个很好的想法。尽管这对我来说可能有点困难。如果有人喜欢张贴代码示例-非常欢迎!与此同时,我开始阅读有关Middelware的内容:我设法创建了一个customPageTypeDecorator:在所有生成的链接中,&C=。。。在语言之后的正确位置编码。我还设法创建了一个中间件,并使用更新的路径创建了一个新的SiteRouterResult。到目前为止,它基本上是有效的。但是,我在连接到TSFE时遇到了一些问题,其中构建了createHashBase。我想我需要根据不同的C参数使用不同的页面缓存版本。这是一项困难的任务,还是只需要几行代码就可以完成?任何我可以找到基础的扩展建议?您可以通过在ext_localconf.php中注册一个钩子来实现这一点,就像这个扩展所做的那样:钩子可以通过修改$params['hashParameters']['country']='My Value'看起来像这样;谢谢!最后一切都很顺利。我将定制PageTypeDecorator、PSR-15中间件和用于缓存定制参数的钩子这三个部分全部放在一个扩展中。当我清理了我的扩展后,我会把它放在GITlab上,并从这里链接到社区共享;-Cheers@StefanM你有没有在GitLab上分享你的解决方案?我们有一个非常类似的问题,希望看到您的结果。