MVC und Request-Verarbeitung · Frage 11 von 12

Die Extension mit dem Key blog_example registriert ein Plugin mit dem Namen PostList. Unter welchem Namespace erwartet Extbase standardmäßig die Request-Argumente dieses Plugins?

1 Antwort ist richtig. Schwer

Lösung anzeigen

Lösung

  • A tx_blogexample_postlist

Wie Extbase den Plugin-Namespace bildet

Kurzfassung

Extbase liest alle Request-Argumente eines Plugins aus einem eigenen Namespace. Standardmäßig ist das tx_, gefolgt vom Extension-Namen und dem Plugin-Namen, beide kleingeschrieben und durch einen Unterstrich getrennt. Entscheidend: Grundlage ist der Extension-Name (BlogExample), nicht der Extension-Key (blog_example).

Schritt für Schritt

Die Methode ExtensionService::getPluginNamespace() setzt den Namespace aus zwei Teilen zusammen:

  1. Extension-Key in UpperCamelCase umwandeln
    blog_example → BlogExample
  2. Extension-Name kleinschreiben
    BlogExample → blogexample
  3. Plugin-Name kleinschreiben
    PostList → postlist
  4. Mit Präfix tx_ zusammensetzen
    tx_blogexample_postlist

Im Code

Registriert wird das Plugin in der ext_localconf.php – hier steht schon der Extension-Name, nicht der Key:

ExtensionUtility::configurePlugin(
    'BlogExample',
    'PostList',
    [PostController::class => 'list,show'],
);
ext_localconf.php

Ein Link auf die Detailansicht trägt die Argumente dann so in der URL:

?tx_blogexample_postlist[action]=show
&tx_blogexample_postlist[post]=42

Warum die anderen Antworten falsch sind

  • tx_blog_example_PostListKombiniert beide Fehler: Unterstriche aus dem Key und die Originalschreibweise des Plugin-Namens.
  • blogexample_postlistDas ist die Plugin-Signatur, die z. B. als Inhaltstyp gespeichert wird – nicht der Namespace für Request-Argumente. Es fehlt das Präfix tx_.
  • tx_blog_example_postlistHier wurde der Extension-Key direkt übernommen. Extbase arbeitet aber mit dem Extension-Namen – die Unterstriche des Keys verschwinden bei der Umwandlung in BlogExample.
  • tx_BlogExample_PostListDie Schreibweise bleibt nicht erhalten: Beide Teile werden mit strtolower() kleingeschrieben.

Namespace überschreiben

„Standardmäßig“ steht nicht umsonst in der Frage: Per TypoScript lässt sich ein eigener Namespace festlegen. getPluginNamespace() prüft diese Einstellung zuerst.

plugin.tx_blogexample_postlist {
  view.pluginNamespace = blog
}

Danach heißen die Argumente kurz blog[post]=42. Praktisch, wenn zwei Plugins dieselben Argumente teilen sollen.

Bezug zum Routing

Der Extbase-Route-Enhancer leitet den Namespace aus denselben Angaben ab. Deshalb stehen dort ebenfalls Extension- und Plugin-Name:

routeEnhancers:
  BlogPosts:
    type: Extbase
    extension: BlogExample
    plugin: PostList
config/sites/main/config.yaml

Zertifikate & Prüfungen

Welche Prüfung kommt als Nächstes?

19 Prüfungen kannst du schon üben, über 21 stimmst du gerade ab. Sieh dir alle Zertifikate mit offiziellen Infos an, gib deine Stimme ab oder schlag deine Prüfung vor.

Zur Zertifikatsübersicht