Impossibile dichiarare l'interfaccia, perché il nome è già in uso


12

Dopo aver creato una semplice interfaccia nel mio nuovo modulo. Ho digitato bin / magento setup: di: compilare e ricevo un errore che dice che il nome è già in uso.

Ecco il mio codice:

namespace Company\Test\Api;

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

Quindi ottengo questo errore:

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 linea è "interfaccia XyzInterface" Non sono sicuro di cosa sto facendo di sbagliato.


1
Potresti eseguire il comando con l'opzione -vvv per vedere la traccia dello stack? Potrebbe essere il file incluso due volte per qualche motivo.
BuskaMuza,

Mostra solo "Errore irreversibile PHP"
Nelly,

Puoi anche provare ad abilitare xdebug. Penso che dovrebbe aiutare a mostrare il backtrace.
BuskaMuza,

1
ho ricevuto questo errore anche a causa della classe "namespace"
errata

Risposte:


36

Oggi ho ricevuto l'errore dello stesso tipo:

Errore irreversibile di PHP: impossibile dichiarare la classe Class \ Name \ Here, poiché il nome è già in uso in /var/www/m2/magento2/app/code/path/to/the/class.php sulla riga 100

dove la riga 100 è la fine del file.

Circa dopo 4 ore di debug trovo davvero il motivo: un errore di stampa nella dichiarazione dello spazio dei nomi. Fino all'ultimo momento non credevo che si trattasse di un errore tipografico nella dichiarazione dei nomi, ma quando ho riscritto tutti i nomi di nuovo, l'errore è scomparso. Questo articolo è stato molto utile:

Mi gratto la testa per un po ', mi chiedo cosa stia succedendo e alla fine realizzerò che è questo

Pulsetorm

cioè ho sbagliato a digitare un nome di spazio dei nomi e quando i caricamenti automatici iniziali caricano il file di classe, non avrà definito la classe che sta cercando, quindi un secondo caricatore automatico (di solito il compositore) lo carica di nuovo e prova a ridefinire lo stesso classe errata.

cioè Magento voleva la classe

Pulsestorm\Helloworld\Observers\Block

ma ho definito

Pulsetorm\Helloworld\Observers\Block

grazie allo spazio dei nomi sbagliato.

Grazie, Alan Storm :)

AGGIORNARE:

Un altro tipo di errore è la dichiarazione dello spazio dei nomi errata con parte mancante dello spazio dei nomi, come in questo esempio:

Errore:

Generazione codice repository ... 1/7 [====> -----------------------] 14% 1 sec 50.0 MiBPHP Errore fatale: Impossibile dichiarare class Migration \ Step \ Version11410to2000Test, perché il nome è già in uso in /var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php su linea 109

dove la riga 109 è la fine del file.

Nel file vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.phpabbiamo trovato lo spazio dei nomi come Migration\Stepquando lo spazio dei nomi corretto dovrebbe essere Migration\Step\UrlRewriteperché il percorso di questa classe è Migration/Step/UrlRewrite. Dopo la modifica dello spazio dei nomi, Migration/Step/UrlRewritel'errore scompare.


1
Ho avuto lo stesso problema, questo è un problema folle
Hamza è stato pubblicato il

+1 per il problema dello spazio dei nomi. Ho perso 2 ore. Molte grazie!
wezzy

1
Inoltre, voglio solo aggiungere a questo, fai molta attenzione quando assegni un nome alle tue directory poiché l'involucro deve corrispondere: anche questa potrebbe essere stata un'altra perdita di due ore!
Smithee,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.