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:
- Extension-Key in UpperCamelCase umwandeln
blog_example → BlogExample - Extension-Name kleinschreiben
BlogExample → blogexample - Plugin-Name kleinschreiben
PostList → postlist - 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'],
);Ein Link auf die Detailansicht trägt die Argumente dann so in der URL:
?tx_blogexample_postlist[action]=show
&tx_blogexample_postlist[post]=42Warum 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