Schnittstelle kann nicht deklariert werden, da der Name bereits verwendet wird

12

Nach dem Erstellen einer einfachen Schnittstelle in meinem neuen Modul. Ich habe bin / magento setup: di: compile eingegeben und erhalte die Fehlermeldung, dass der Name bereits verwendet wird.

Hier ist mein Code:

namespace Company\Test\Api;

/*
 *  @api
 */
interface XyzInterface {
    public function getSomething();
}

Dann bekomme ich diesen Fehler:

Repositories code generation... 1/7 [====>-----------------------]  14% 2 secs 52.0 MiBPHP 
Fatal error:  Cannot declare interface Company\Test\Api\XyzInterface, because the name is already in use in .../app/code/Company/Test/Api/XyzInterface.php on line 13

Die Zeile ist die "Schnittstelle XyzInterface". Ich bin nicht sicher, was ich falsch mache.

Nelly
quelle
1
Könnten Sie bitte den Befehl mit der Option -vvv ausführen, um die Stapelverfolgung anzuzeigen? Könnte sein, dass die Datei aus irgendeinem Grund zweimal enthalten ist.
BuskaMuza
Es zeigt nur "PHP Fatal Error"
Nelly
Sie können auch versuchen, xdebug zu aktivieren. Ich denke, es sollte helfen, die Rückverfolgung anzuzeigen.
BuskaMuza
1
Ich habe diesen Fehler auch wegen der falsch eingegebenen "Namespace" -Klasse
Ansyori

Antworten:

34

Heute habe ich den gleichen Fehler erhalten:

Schwerwiegender PHP-Fehler: Die Klasse Class \ Name \ Here kann hier nicht deklariert werden, da der Name bereits in /var/www/m2/magento2/app/code/path/to/the/class.php in Zeile 100 verwendet wird

Dabei steht die Zeile 100 am Ende der Datei.

Ungefähr nach 4 Stunden Debugging finde ich wirklich den Grund: einen Druckfehler in der Namespace-Deklaration. Bis zum letzten Moment habe ich nicht geglaubt, dass es sich um einen Tippfehler bei der Namenserklärung handelt, aber wenn ich alle Namen neu geschrieben habe, ist der Fehler verschwunden. Dieser Artikel war sehr hilfreich:

Ich werde mich eine Weile am Kopf kratzen, mich fragen, was los ist, und schließlich erkennen, dass es das ist

Pulsetorm

dh ich habe einen Namespace-Namen falsch eingegeben, und wenn die anfänglichen Autoloads die Klassendatei laden, hat sie die gesuchte Klasse nicht definiert, und dann lädt ein zweiter Autoloader (normalerweise Composer) sie erneut und versucht, sie neu zu definieren falsche Klasse.

dh Magento wollte die Klasse

Pulsestorm\Helloworld\Observers\Block

aber ich habe definiert

Pulsetorm\Helloworld\Observers\Block

dank des falschen Namespace.

Vielen Dank, Alan Storm :)

AKTUALISIEREN:

Ein anderer Typ dieses Fehlers ist eine falsche Namespace-Deklaration mit fehlendem Teil des Namespace, wie in diesem Beispiel:

Error:

Generierung von Repositorys-Code ... 1/7 [====> -----------------------] 14% 1 Sek. 50.0 MiBPHP Schwerwiegender Fehler: Kann nicht deklariert werden Klasse Migration \ Step \ Version11410to2000Test, da der Name bereits in /var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php verwendet wird Zeile 109

wobei die Zeile 109 das Ende der Datei ist.

In der Datei haben vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.phpwir den Namespace so gefunden, wie Migration\Stepder richtige Namespace sein sollte, Migration\Step\UrlRewriteda der Pfad zu dieser Klasse lautet Migration/Step/UrlRewrite. Nach dem Ändern des Namespace ist Migration/Step/UrlRewriteder Fehler weg.

Siarhey Uchukhlebau
quelle
1
Ich hatte das gleiche Problem, das ist ein verrücktes Problem
Hamza Alayed