如何在 TYPO3 CMS 9.5 LTS 中创建动态字符串路由增强器?

How to create a dynamic string route enhancer in TYPO3 CMS 9.5 LTS?

我为我的扩展路由增强器创建了一个简单的方面,如下所示:

routeEnhancers:
  Trainee:
    type: Extbase
    extension: Dsinstitution
    plugin: Dslisttrainees
    routes:
      - routePath: '/trainee/{trainee-identifier}'
        _controller: 'Trainee::show'
        _arguments:
          trainee-identifier: trainee
    defaultController: 'Trainee::list'
    aspects:
      trainee-identifier:
        type: PersistedPatternMapper
        tableName: 'tx_dsinstitution_domain_model_trainee'
        routeFieldPattern: '^(?<lastname>.+)-(?<prename>.+)-(?<uid>\d+)$'
        routeFieldResult: '{lastname}-{prename}-{uid}'

问题是,如果有人的名字非常神秘,会破坏预期的 url 结构(例如,其中包含 &/)。为此,扩展 news 使用 path_segment 属性而不是多个字段。

为此,我用该属性扩展了 ext_tables.sql。但是我怎样才能强制 TCA 自动用“lastname-prename-uid”的净化结构填充它?我不明白 news 扩展方式。

答案:不要!

在文档中以及根据几位开发人员的建议,您不应在 Persisted Pattern Mapper 中使用自由文本字段。相反,您在 TCA 中使用 slug

有关更多信息,请查看文档:https://docs.typo3.org/m/typo3/reference-tca/master/en-us/ColumnsConfig/Type/Slug.html

向模型的 TCA 添加如下内容:

'urlslug' => [
    'exclude' => true,
    'label' => 'urlslug',
    'config' => [
        'type' => 'slug',
        'generatorOptions' => [
            'fields' => ['lastname', 'prename', 'uid'],
            'fieldSeparator' => '-',
            'prefixParentPageSlug' => true
        ],
        'fallbackCharacter' => '-',
        'eval' => 'uniqueInSite',
        'default' => ''
    ]
]

记得将 urlslug 添加到您的模型和扩展的 ext_tables.sql 中。此外,slugs 只会在 new 对象上生成,只能使用 TCA(后端)创建。