Zum Inhalt springen

routeEnhancers mit Default Arguments

Erstellt am 7. August 2019 · 6 Antworten · letzte Antwort am 9. August 2019

Tags: Extbase, URLs & Routing, Frage

Nesfiran ·

Moin,

ich versuche nun schon seit einiger Zeit eine Erweiterung mit lesbaren Url´s zu versehen.
Das klappt auch soweit ganz gut nur wenn mehere Argumente übergeben werden und eines davon nicht vorhanden ist. Generiert das Typo3 gar keine Url´s mehr.

Gibt es keine möglichkeit default Werte für Argumente in einer Extbase Extension mit anzugeben so dass das Argument ignoriert wird?

Die Defaults aus der Dokuemntation haben leider null auswirkungen.

routeEnhancers:
  PeferenzenDetail:
    type: Extbase
    limitToPages: [566]
    extension: CcAnlagenbau
    plugin: Anlagenbau
    routes:
      - { routePath: '/{reference_title}/{benefits_title}', _controller: 'Referenzen::show', _arguments: {'reference_title': 'referenzen', 'benefits_title': 'leistungen'} }
    defaultController: 'Referenzen::list'
    defaults:
      page: '0'
      benefits_title: ''
    aspects:
      reference_title:
        type: PersistedAliasMapper
        tableName: tx_ccanlagenbau_domain_model_referenzen
        routeFieldName: slug
      benefits_title:
        type: PersistedAliasMapper
        tableName: tx_ccanlagenbau_domain_model_leistungen
        routeFieldName: slug
Teisinger ·

mit defaults werden die Argumente nicht ignoriert, die defaults werden gesetzt falls ein Argument nicht übergeben wurde.
Sollte eigentlich schon funktionieren - aber yaml ist da bescheuert, musst aufpassen das du ja die richtige Einrückung hast etc.

Nesfiran ·

Genau das wollte ich bezwecken, hatte mich nicht präzise ausgedrückt.
Das übergebene Argument ist nicht vorhanden und dann soll der Default Wert dafür sorgen das die URL´s trotzdem korrekt erzeugt werden.

Teisinger ·

benefits_title ist bei dir oben im default leer - macht für mich im Moment keinen Sinn das dann zu definieren.

Was kommt denn dann für eine URL? Fehlermeldung?

Nesfiran ·

Eine Fehlermeldung gibt es nicht, es wird einfach der Link mit action und controller generiert statt mit der lesbaren Variante.

Ich hatte die Hoffnung dass das Argument Leistungen ignoriert wird wenn man dies mit Default = '' deklariert, dem scheint nicht so.

Das Problem was ich habe ist das ich eine Detailseite habe mit Referenzen einmal mit und ohne Kategoriesierung.

Normal: /referenzen/referenz-1
Mit Kategorie: /referenzen/leistungen/referenz-1

Sonst muss ich die Extension um eine weitere Action ergänzen dann kann ich auch zwei verschiedene Konfigurationen benutzen.

Nesfiran · · Beste Antwort

Da ich mich jetzt seit einiger Zeit mit den Routes von Typo3 beschäftigen durfte. Hier die Lösung vielleicht hilft es jemanden etwas Zeit zu sparen.

Wenn man eine Detailseite hat für sein Objekt und mehreren Parameter die sich auf die URL auswirken sollen kommt es zwangsläufig dazu das einige Argumente nicht mehr Vorhanden sind.
Da man pro Action aber nur 1 Konfiguration hat kommt es hier zu Problemen.

Die Lösung ist einfach für jeden Fall seperates Routes definieren in der gleichen Konfiguration der Action.

Für mein obiges Beispiel würde die wie folgt aussehen.

- { routePath: '/{reference_title}', _controller: 'Referenzen::show', _arguments: {'reference_title': 'referenzen'} }
- { routePath: '/{benefits_title}/{reference_title}', _controller: 'Referenzen::show', _arguments: {'reference_title': 'referenzen', 'benefits_title': 'leistungen'} }

Teisinger ·

Cool, gut zu wissen. 🙂

Leider erklärt es noch nicht wieso das "default" bei dir nicht klappt...
Naja Hauptsache du hast eine Lösung.