首页 > 解决方案 > 如何在 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。lastname但是我怎样才能强制 TCA 用“ - prename- ”的净化结构自动填充它uid?我不明白news扩展方式。

标签: routesextbasetypo3-9.xtypo3-tca

解决方案


答:不要!

在文档中并根据多个开发人员的建议,您不应在持久模式映射器中使用自由文本字段。相反,您slug在 TCA 中使用 a 。

有关更多信息,请查看文档: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 只会在对象上生成,仅使用 TCA(后端)创建。


推荐阅读