Impossible de déclarer l'interface, car le nom est déjà utilisé


12

Après avoir créé une interface simple dans mon nouveau module. J'ai tapé dans la configuration bin / magento: di: compile, et je reçois une erreur disant que le nom est déjà utilisé.

Voici mon code:

namespace Company\Test\Api;

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

Ensuite, je reçois cette erreur:

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

La ligne est "l'interface XyzInterface", je ne sais pas ce que je fais mal.


1
Pourriez-vous s'il vous plaît exécuter la commande avec l'option -vvv pour voir la trace de la pile? Peut-être que le fichier est inclus deux fois pour une raison quelconque.
BuskaMuza

Il montre juste "PHP Fatal Error"
Nelly

Vous pouvez également essayer d'activer xdebug. Je pense que cela devrait aider à afficher la trace.
BuskaMuza

1
j'ai eu cette erreur aussi à cause de la classe "namespace"
mal orthographiée

Réponses:


36

Aujourd'hui, j'ai reçu l'erreur de même type:

Erreur fatale PHP: Impossible de déclarer la classe Class \ Name \ Here, car le nom est déjà utilisé dans /var/www/m2/magento2/app/code/path/to/the/class.php sur la ligne 100

où la ligne 100 est à la fin du fichier.

Environ après 4 heures de débogage, je trouve vraiment la raison: une erreur d'impression dans la déclaration de l'espace de noms. Jusqu'au dernier moment, je ne croyais pas qu'il s'agissait d'une erreur typographique dans la déclaration des noms, mais quand j'ai réécrit tous les noms à nouveau - l'erreur a disparu. Cet article a été très utile:

Je vais me gratter la tête pendant un moment, me demander ce qui se passe, et finalement réaliser que c'est ça

Pulsetorm

c'est-à-dire que j'ai mal tapé un nom d'espace de noms, et lorsque le chargement automatique initial charge le fichier de classe, il n'aura pas défini la classe qu'il recherche, puis un deuxième chargeur automatique (généralement Composer) le charge à nouveau et essaie de redéfinir le même classe incorrecte.

c'est-à-dire que Magento voulait la classe

Pulsestorm\Helloworld\Observers\Block

mais j'ai défini

Pulsetorm\Helloworld\Observers\Block

grâce au mauvais espace de noms.

Merci, Alan Storm :)

MISE À JOUR:

Un autre type de cette erreur est une déclaration d'espace de noms incorrecte avec une partie manquante de l'espace de noms, comme dans cet exemple:

Erreur:

Génération de code des référentiels ... 1/7 [====> -----------------------] 14% 1 sec 50.0 MiBPHP Erreur fatale: impossible de déclarer classe Migration \ Step \ Version11410to2000Test, car le nom est déjà utilisé dans /var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php sur ligne 109

où la ligne 109 est à la fin du fichier.

Dans le fichier, vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.phpnous avons trouvé l'espace de noms comme Migration\Steplorsque l'espace de noms correct devrait être Migration\Step\UrlRewritecar le chemin d'accès à cette classe est Migration/Step/UrlRewrite. Après le changement de l'espace de noms, Migration/Step/UrlRewritel'erreur a disparu.


1
J'ai eu le même problème, c'est un problème fou
Hamza Alayed

+1 pour le problème d'espace de noms. J'ai perdu 2 heures. Merci beaucoup!
wezzy

1
Vous voulez également ajouter quelque chose à cela, soyez particulièrement prudent lorsque vous nommez vos répertoires car la casse doit correspondre - cela aurait également pu perdre deux heures de plus!
Smithee
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.