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 :
-
Instale Composer en su directorio bin, copie y pegue los pasos de https://getcomposer.org/download/
-
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"
]
},
...