Não é possível declarar interface, porque o nome já está em uso

12

Depois de criar uma interface simples no meu novo módulo. Digitei bin / magento setup: di: compile e recebo um erro dizendo que o nome já está em uso.

Aqui está o meu código:

namespace Company\Test\Api;

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

Então eu recebo este erro:

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

A linha é a "interface XyzInterface". Não tenho certeza do que estou fazendo de errado.

Nelly
fonte
1
Você poderia executar o comando com a opção -vvv para ver o rastreamento da pilha? Pode ser que o arquivo seja incluído duas vezes por algum motivo.
BuskaMuza 08/07
Ele apenas mostra "PHP Fatal Error"
Nelly
Você também pode tentar ativar o xdebug. Eu acho que deve ajudar a exibir o backtrace.
BuskaMuza
1
eu tenho esse erro também por causa da classe digitado errado "namespace"
Ansyori

Respostas:

36

Hoje recebi o mesmo erro de tipo:

Erro fatal do PHP: Não é possível declarar a classe Class \ Name \ Here, porque o nome já está em uso em /var/www/m2/magento2/app/code/path/to/the/class.php na linha 100

onde a linha 100 é final do arquivo.

Aproximadamente após 4 horas de depuração, eu realmente acho o motivo: uma impressão incorreta na declaração do namespace. Até o momento final, eu não acreditava que se tratasse de um erro tipográfico na declaração de nomes, mas quando reescrevi todos os nomes novamente - o erro desapareceu. Este artigo foi muito útil:

Vou coçar a cabeça por um tempo, me perguntar o que está acontecendo e, eventualmente, perceber que é isso

Pulsetorm

ou seja, digitei incorretamente o nome de um espaço para nome e, quando o carregamento automático inicial carrega o arquivo de classe, ele não define a classe que está procurando e, em seguida, um segundo carregador automático (normalmente o compositor) o carrega novamente e tenta redefinir o mesmo classe incorreta.

ou seja, Magento queria a classe

Pulsestorm\Helloworld\Observers\Block

mas eu defini

Pulsetorm\Helloworld\Observers\Block

graças ao espaço para nome errado.

Obrigado, Alan Storm :)

ATUALIZAR:

Outro tipo desse erro é a declaração incorreta do Namespace com parte faltante do namespace, como neste exemplo:

Erro:

Geração de código de repositórios ... 1/7 [====> -----------------------] 14% 1 s 50,0 MiBPHP Erro fatal: não é possível declarar classe Migration \ Step \ Version11410to2000Test, porque o nome já está sendo usado em /var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php em linha 109

onde a linha 109 é final do arquivo.

No arquivo vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php, encontramos o espaço para nome como Migration\Stepquando deveria estar o espaço para nome correto, Migration\Step\UrlRewritepois é o caminho para essa classe Migration/Step/UrlRewrite. Após a alteração do espaço para nome, Migration/Step/UrlRewriteo erro desapareceu.

Siarhey Uchukhlebau
fonte
1
Eu tive o mesmo problema, este é um problema louco #
2155 Hamza Alayed
+1 para o problema do espaço para nome. Eu perdi 2 horas. Muito obrigado!
wezzy
Também quero adicionar isso, tome cuidado extra ao nomear seus diretórios, pois a caixa deve corresponder - isso também pode ter sido desperdiçado por mais duas horas!
Smithee