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.