RouteEnhancers

Doku

https://docs.typo3.org/typo3cms/extensions/core/latest/Changelog/9.5/Feature-86365-RoutingEnhancersAndAspects.html

News Beispiel

routeEnhancers:
  NewsPlugin:
    type: Extbase
    limitToPages:
      - 12
    extension: News
    plugin: Pi1
    routes:
      -
        routePath: '/detail/{news_title}'
        _controller: 'News::detail'
        _arguments:
          news_title: news
      -
        routePath: '/archiv/{year}/{month}'
        _controller: 'News::archive'
    defaultController: 'News::list'
    defaults:
      page: '0'
    aspects:
      news_title:
        type: PersistedAliasMapper
        tableName: tx_news_domain_model_news
        routeFieldName: path_segment

Intro

Der routeEnhancer ist in einzelne "routes" aufgeteilt welche jeweils eine controller -> action behandeln

        _controller: 'News::detail'

Hier controller News und action detail.

Die angegebenen Actions und Controllers werden automatisch aus der url entfernt. Nun muss nur noch beschrieben werden wie mit den übrigen Parametern verfahren wird. Dabei gibt es zwei grundsätzliche Wege.

1) Direkte Ausgabe

        routePath: '/archiv/{year}/{month}'
        _controller: 'News::archive'

Im Beispiel des Archives werden die parameter für {month} (tx_news_pi1[month]=...) und {year} einfach direkt in den Pfad geschrieben.

2) Aspects

   -
        routePath: '/detail/{news_title}'
        _controller: 'News::detail'
        _arguments:
          news_title: news

   aspects:
      news_title:
        type: PersistedAliasMapper
        tableName: tx_news_domain_model_news
        routeFieldName: path_segment

Ein Aspect kann mann sich wie einen alternativen wert vorstellen im news Detail Beispiel wird dabei ein Datenbank Feld ausgelesen. Um dies zu nutzen deklariert mann zuerst ein Argument:

_arguments:
   news_title: news

Wobei links die variable steht und rechts der Parameter hier news (tx_news_pi1[news]=...). Im Bereich aspects wird jetzt Beschrieben womit der Pfad gefüllt wird. Wichtig dabei ist das der Wert eindeutig ist um den Datensatz eindeutig zu identifizieren.

Im TCA eines Pfad Feldes kann mann das folgendermaßen sicherstellen:

'path_segment' => [
            'exclude' => true,
            'label' => $ll . 'tx_news_domain_model_news.path_segment',
            'config' => [
                'type' => 'input',
                'size' => 30,
                'eval' => 'nospace,alphanum_x,lower,unique',
            ]
        ],

Alternativ können die werte auch aus einem anderen feld generiert werden:

'slug' => [
            'exclude' => false,
            'label' => 'slug',
            'config' => [
                'type' => 'slug',
                'size' => 50,
                'generatorOptions' => [
                    'fields' => ['title'],
                    'replacements' => [
                        '/' => '-'
                    ],
                ],
                'fallbackCharacter' => '-',
                'eval' => 'uniqueInSite',
                'default' => ''
            ],
        ],