exceptions createnotfoundexception php symfony exception

php - createnotfoundexception - Symfony3 ClassNotFoundException después de la creación del paquete



symfony createnotfoundexception (3)

Acabo de instalar una copia nueva de S3.3.4 (última versión a partir de este escrito) usando:

composer create-project symfony/framework-standard-edition s334 "3.3.4" bin/console generate:bundle Share across multiple apps: yes namespace: Paul/ArtBundle bundle name: PaulArtBundle Target Directory: src/

Actualicé el navegador y, efectivamente, recibí el mensaje de clase no encontrada.

El comando generate: bundle no actualiza la sección de carga automática de composer.json cuando se introduce un nuevo espacio de nombres. Edite composer.json y:

# composer.json "autoload": { "psr-4": { "AppBundle//": "src/AppBundle", "Paul//": "src/Paul" }, "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] },

Entonces corre

composer dumpautoload

Y reinicie el servidor (tal vez). Eso debería solucionar el problema de clase de paquete no encontrado.

No he usado el comando generate: bundle hace bastante tiempo desde que el estándar era poner todo bajo AppBundle, así que no sé cuánto tiempo ha estado "roto". Pero al menos tres preguntas en la última semana indican que fue algo reciente.

Y, por cierto, cuando actualicé el navegador recibí "Hello World", que me arrojó un poco. Resulta que el nuevo paquete anula la ruta /, que también es algo especial.

Y en caso de que alguien se pregunte por qué esto comenzó a suceder, Symfony 3.2 cambió de

#composer.json "psr-4": { "": "src/" }, To "psr-4": { "AppBundle//": "src/AppBundle" },

Siempre puede cambiarlo de nuevo, aunque creo que deletrear espacios de nombres individuales podría ser "mejor". No es seguro.

Y aquí hay un problema con más detalles: https://github.com/symfony/symfony-standard/issues/1098

Parece que el mantenedor favoreció una pequeña mejora de velocidad en lugar de romper un comando existente. Oh bien. Se supone que Symfony Flex hará que todo vuelva a ser genial.

Quería comenzar un nuevo proyecto 3.3 en Symfony y comencé como de costumbre:

1.) Creación del nuevo proyecto: symfony new ArtProject

2.) Crear un nuevo paquete: php app/console generate:bundle (Paul / ArtBundle, yml, src /)

Luego ejecuto el servidor local y cuando abro 127.0.0.1:8000 recibo este hermoso mensaje:

(1/1) ClassNotFoundException

Intentó cargar la clase "PaulArtBundle" desde el espacio de nombres "Paul / ArtBundle". ¿Olvidó una declaración de "uso" para otro espacio de nombres? en AppKernel.php (línea 19)

Lo cual es extraño y no he descubierto por qué sucede esto hasta ahora. Antes de crear el paquete, no hubo error; Vi la típica página de inicio de Symfony.

public function registerBundles() { $bundles = [ new Symfony/Bundle/FrameworkBundle/FrameworkBundle(), ...... new Sensio/Bundle/FrameworkExtraBundle/SensioFrameworkExtraBundle(), new AppBundle/AppBundle(), new Paul/ArtBundle/PaulArtBundle(), ]; }

<?php namespace Paul/ArtBundle; use Symfony/Component/HttpKernel/Bundle/Bundle; class PaulArtBundle extends Bundle { }

¿Alguna idea de lo que está pasando allí? No cambié nada, solo ejecuté estos comandos.


Esto funciona para mí en:

Genera tu paquete con

./console generate: bundle

Y siga los pasos como siempre, ahora, haga lo que quiera en su archivo composer.json con la línea

"AppBundle//": "src/AppBundle"

Reemplace con "": "src/" o agregue su paquete, por ejemplo: "BackendBundle//": "src/BackendBundle"

Aquí está la nueva parte :

  1. Instale Composer en su directorio bin, copie y pegue los pasos de https://getcomposer.org/download/

  2. Sube un nivel en el directorio de tu proyecto y en tu carpeta raíz (de tu proyecto) ejecuta el siguiente comando

php ./bin/composer.phar update


Si genera un paquete para su uso en múltiples proyectos (con su propio espacio de nombres), debe agregarlo en el composer.json como sigue:

Supongamos que el nombre de su paquete es CompanyFooBundle con el espacio de nombres Company/Bundle/FooBundle entonces la sección de carga automática del compositor debería verse así:

... "autoload": { "psr-4": { "Company//Bundle//FooBundle//": "src/Company/Bundle/FooBundle" }, "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] }, ...