Bug #372
offen[Bugsink] TYPO3\CMS\Extbase\Mvc\Exception\InvalidControllerNameException: The controller "search" is not allowed by plugin "Pi2". Please check for TYPO3\CMS\Ex…
0%
Beschreibung
Bugsink: https://bugsink.cytrus.de/issues/issue/1e74b351-b50b-4e11-bb84-1751afdfa05d/event/last/
Typ: NEW issue
Projekt: www-fuchsfelge-com
Bugsink Alert
TYPO3\CMS\Extbase\Mvc\Exception\InvalidControllerNameException: The controller "search" is not allowed by plugin "Pi2". Please check for TYPO3\CMS\Ex…
Automatisch erstellt durch n8n
KI-Analyse:
1️⃣ Ursache (Root-Cause)¶
| Symptom | TYPO3\CMS\Extbase\Mvc\Exception\InvalidControllerNameException – „The controller 'search' is not allowed by plugin 'Pi2'.“ |
|---|---|
| Was die Exception tatsächlich bedeutet | Ein Front-End-Plugin (Pi2) versucht, einen Extbase-Controller (search) zu erreichen, der in der Plugin-Konfiguration (dem Aufruf von ExtensionUtility::configurePlugin() in ext_localconf.php) nicht erlaubt ist. |
| Warum der Stack-Trace auf die Middleware hinweist | Die Anfrage durchläuft den regulären TYPO3-Anfragezyklus (AbstractApplication::run → RequestHandler → MiddlewareDispatcher …). Als der RequestHandler den passenden Plugin-Router auflöst, bittet er Extbase, den Controller search für das Plugin Pi2 zu instanziieren. Extbase überprüft die von der Extension registrierten erlaubten Controller und löst die Exception aus, weil search nicht in der Liste steht. |
Zusammenfassung: Die Plugin-Konfiguration für das Plugin Pi2 enthält nicht den Controller search.
2️⃣ Konkreter Fix (was zu ändern ist)¶
-
Öffne die
ext_localconf.phpder Extension, diePi2registriert (normalerweise<Vendor>/<Extension>/ext_localconf.php). -
Finde den
configurePlugin()-Aufruf fürPi2. Ein typisches Muster sieht so aus:
ExtensionUtility::configurePlugin(
'MyExtension', // Extension name
'Pi2', // Plugin signature (what you see in the page module)
['Default' => 'Default'], // allowed controllers – currently missing 'search'
[] // actions (if you use multiple actions per controller)
);
-
Füge
searchzum erlaubten Controller-Set hinzu (oder erstelle ein neues Set, falls['Default' => 'Default']das Einzige ist, was aktuell existiert).
ExtensionUtility::configurePlugin(
'MyExtension',
'Pi2',
['Default' => 'Default', 'Search' => 'Search'], // <-- added 'Search' => 'Search'
[] // actions – optional, nur benötigt wenn du mehrere Aktionen pro Controller hast
);
Wenn deine Extension mehrere Aktionen innerhalb eines Controllers unterstützt (z. B. search → search, search → result), kannst du die zweite Argumente (die actions-Array) anpassen:
ExtensionUtility::configurePlugin(
'MyExtension',
'Pi2',
['Default' => 'Default', 'Search' => 'Search'],
['Search' => ['search', 'result']] // erlaubt die Aktionen search & result innerhalb des Search-Controllers
);
-
Speichere die Datei und leere den Cache (caching deaktiviert, wenn möglich, oder führe
typo3cms cache:flushaus). -
Überprüfe das Verhalten erneut – der Request, der auf einen
search-Controller für das Plugin Pi2 verweist, sollte nun durch den korrekten Extbase-Aktionsmethoden (searchAction()/searchAction($searchTerm)) bedient werden.
Warum ist das wichtig?
ExtensionUtility::configurePluginist die einzige Stelle, an der TYPO3 weiß, welche Extbase-Controller durch ein Frontend-Plugin aufgerufen werden dürfen. Wenn ein Controller fehlt, wirft Extbase dieInvalidControllerNameExceptionfrühzeitig im Request-Lifecycle (wie in den gezeigten Frames) aus.
3️⃣ Welche TYPO3 Extension ist betroffen?¶
Die Exception verrät uns nur den Plugin-Signaturenamen (Pi2). Die Extension, die dieses Plugin registriert, ist diejenige, deren ext_localconf.php den configurePlugin()-Aufruf enthält.
| Typische Namenskonvention | Beispiel-Extension (diejenige, die tatsächlich Pi2 verwendet) |
|---|---|
pi2 (selbstbenannt) |
typo3/pi2 (historische Extension, wird selten verwendet) |
my_extension |
Jede Drittanbieter- oder Unternehmens-Extension, die Pi2 für einen Content-Element-Typ definiert (z. B. ein benutzerdefiniertes „Search Box“-Plugin) |
Wichtigste Erkenntnis: Du musst die Extension finden, die
ExtensionUtility::configurePlugin('*', 'Pi2', …)enthält. Dies ist normalerweise die Extension, deren Name im ersten Argument des Aufrufs erscheint (z. B.MyExtensionoben). Sobald du den Extensjonsnamen kennst, kannst du den korrekten Speicherort (EXT:my_extension/ext_localconf.php) lokalisieren.
Falls du nicht sicher bist, wo Pi2 definiert ist, führe folgende Suche aus:
grep -R "configurePlugin.*'Pi2'" /path/to/your/typo3project/extensions/
Der gefundene Dateipfad verrät dir die Extension.
4️⃣ Confidence-Level¶
| Faktor | Bewertung |
|---|---|
Die Exception-Nachricht ist eindeutig (InvalidControllerNameException) |
✅ Hoch |
| Der Stacktrace leitet uns zum regulären TYPO3-Request-Handler weiter → confirmiert, dass der Fehler während der Controller-Auflösung auftritt | ✅ Hoch |
Die Lösung ist ein bekannter, dokumentierter Best-Practice-Schritt (ExtensionUtility::configurePlugin) |
✅ Hoch |
Die genaue Extension (Pi2) wird nicht vom Stacktrace angegeben, daher müssen wir auf das Muster configurePlugin annehmen |
⚠️ Mittel |
| Gesamte Sicherheit des Schlags | 90 % |
Ich bin zu 90 % überzeugt, dass der Fix der hinzugefügte
search-Controller in derconfigurePlugin-Konfiguration für die Extension ist, diePi2registriert. Wenn du den genauen Extensionsnamen nach der oben gezeigten Suche identifizierst, kannst du den Confidence-Wert auf 95–100 % erhöhen.
TL;DR¶
- Die Exception tritt auf, weil das Plugin
Pi2nicht für den Extbase-Controllersearchkonfiguriert ist. - Bearbeite
ext_localconf.phpder Extension, diePi2registriert, und fügesearch(oderSearch=>Search) zum erlaubten Controller-Set des Plugins hinzu (und optionalactionsfür die dazugehörigen Aktionen). - Leere den Cache → der Request sollte nun korrekt durch die
searchAction()-Methode des Extbase-Controllers bedient werden. - Das fehlende Element ist ein Konfigurationsfehler, kein Laufzeitfehler; das Beheben der
configurePlugin-Zeile eliminiert das Problem zu 90 % der Sicherheit.
Nichts anzuzeigen