TYPO3 v9 Маршрутизация: Как заставить часть routePath уважать разрешенное значение другой части? - PullRequest
1 голос
/ 27 апреля 2019

У меня есть расширение extbase с двумя моделями, которые имеют отношение 1: n, страну и город.URL должны выглядеть так: http://www.example.com/countryname/cityname. Названия городов не являются уникальными в мире, например, в Германии и в Соединенных Штатах есть город под названием «Лейпциг».

Так что я могу иметь два URL

И разрешение «Лейпциг» до правильного идентификатора должно учитывать часть страны.

Возможно ли это с имеющимися в настоящее время усилителями / аспектами?Если нет, есть ли у вас какие-либо предложения, как обращаться с этими случаями?

routeEnhancers:
  MyWebsitePi1:
    type: Extbase
    limitToPages: [1]
    extension: Website
    plugin: Pi1
    routes:
      - routePath: '/{country_slug}/{city_slug}'
        _controller: 'City::show'
        _arguments:
          country_slug: 'country'
          city_slug: 'city'
    defaultController: 'City::list'
    aspects:
      country_slug:
        type: PersistedAliasMapper
        tableName: 'tx_mywebsite_domain_model_country'
        routeFieldName: 'slug'
      city_slug:
        type: PersistedAliasMapper
        tableName: 'tx_mywebsite_domain_model_city'
        routeFieldName: 'slug'

1 Ответ

0 голосов
/ 30 апреля 2019

Я думаю, что комбинированное поле слизней было бы лучшим решением здесь.В своем коде TCA вы можете настроить слаг для создания из нескольких полей базы данных вместо одного:

'slug' => [
    'exclude' => true,
    'label' => 'LLL:EXT:...',
    'config' => [
        'type' => 'slug',
        'fallbackCharacter' => '-',
        'size' => 50,
        'eval' => 'uniqueInSite',
        'generatorOptions' => [
            'fields' => ['country', 'city'],
            'fieldSeparator' => '-',
            'prependSlash' => true,
            'prefixParentPageSlug' => true,
            'replacements' => [
                '/' => '',
            ],
        ]
    ],
],

Вместо uniqueInSite вы также можете использовать uniqueInPid (см. документы ).В конфиге yml маршрутизации просто прочитайте поле slug, затем наберите PersistedAliasMapper и все готово.Я еще не тестировал использование / в качестве поля-разделителя, но - работает нормально.

...