No se puede declarar la interfaz porque el nombre ya está en uso

12

Después de crear una interfaz simple en mi nuevo módulo. Escribí bin / magento setup: di: compile, y recibo un error que dice que el nombre ya está en uso.

Aquí está mi código:

namespace Company\Test\Api;

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

Entonces me sale este error:

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 línea es la "interfaz XyzInterface" No estoy seguro de lo que estoy haciendo mal.

Nelly
fuente
1
¿Podría ejecutar el comando con la opción -vvv para ver el seguimiento de la pila? Podría ser que el archivo se incluye dos veces por alguna razón.
BuskaMuza
Simplemente muestra "Error fatal de PHP"
Nelly
También puede intentar habilitar xdebug. Creo que debería ayudar a mostrar la traza inversa.
BuskaMuza
1
también recibí este error debido a una clase de "espacio de nombres" mal
escrita

Respuestas:

36

Hoy recibí el mismo error de tipo:

Error fatal de PHP: no se puede declarar la clase Class \ Name \ Here, porque el nombre ya está en uso en /var/www/m2/magento2/app/code/path/to/the/class.php en la línea 100

donde la línea 100 es el final del archivo.

Aproximadamente después de 4 horas de depuración, realmente encuentro la razón: un error de imprenta en la declaración del espacio de nombres. Hasta el momento final, no creía que fuera un error tipográfico en la declaración de nombres, pero cuando reescribí todos los nombres nuevamente, el error desapareció. Este artículo fue muy útil:

Me rascaré la cabeza por un tiempo, me preguntaré qué está pasando y eventualmente me daré cuenta de que es esto

Pulsetorm

es decir, he escrito mal un nombre de espacio de nombres, y cuando las cargas automáticas iniciales cargan el archivo de clase, no habrá definido la clase que está buscando, y luego un segundo cargador automático (el del Compositor usualmente) lo carga nuevamente e intenta redefinir el mismo clase incorrecta

es decir, Magento quería la clase

Pulsestorm\Helloworld\Observers\Block

pero definí

Pulsetorm\Helloworld\Observers\Block

Gracias al espacio de nombres incorrecto.

Gracias, Alan Storm :)

ACTUALIZAR:

Otro tipo de ese error es la declaración incorrecta del espacio de nombres con una parte faltante del espacio de nombres, como en este ejemplo:

Error:

Generación de código de repositorios ... 1/7 [====> -----------------------] 14% 1 seg 50.0 MiBPHP Error fatal: No se puede declarar class Migration \ Step \ Version11410to2000Test, porque el nombre ya está en uso en /var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php en línea 109

donde la línea 109 es el final del archivo.

En el archivo vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.phpencontramos el espacio de nombres como Migration\Stepcuando el espacio de nombres correcto debería ser Migration\Step\UrlRewriteporque la ruta a esta clase es Migration/Step/UrlRewrite. Después de cambiar el espacio de nombres al Migration/Step/UrlRewriteerror se ha ido.

Siarhey Uchukhlebau
fuente
1
Tuve el mismo problema, este es un problema loco
Hamza llegó el
+1 para el problema del espacio de nombres. He perdido 2 horas. ¡Muchas gracias!
Wezzy
1
Además, solo desea agregar a esto, tenga mucho cuidado al nombrar sus directorios, ya que la carcasa debe coincidir, ¡esto también podría haber sido otras dos horas desperdiciadas!
Smithee