[bug sf2.3] call to undefined method doctrine orm configuration getaliasnamespaces()
Composer.phar est bien relou mon ami
Bon alors la, ca va pas ! J'upgrade mon Framework préféré (Symfony) et sans parler des bugs que j'ai résolu rapidement, j'ai plus moyen de générer une entité sans avoir un beau message d'erreur !
You are going to generate a "MsgMsgBundle:ducon" Doctrine2 entity using the "annotation" format. Do you confirm generation [yes]? Entity generation PHP Fatal error: Call to undefined method Doctrine\ORM\Configuration::getAliasNamespaces() in dev_path\sf2testdev\vendor\sensi o\generator-bundle\Sensio\Bundle\GeneratorBundle\Generator\DoctrineEntityGenerator.php on line 45 PHP Stack trace: PHP 1. {main}() dev_path\sf2testdev\app\console:0 PHP 2. Symfony\Component\Console\Application->run() dev_path\sf2testdev\app\console:27 PHP 3. Symfony\Bundle\FrameworkBundle\Console\Application->doRun() dev_path\sf2testdev\vendor\symfony\symfony\src\Symfony\Com ponent\Console\Application.php:121 PHP 4. Symfony\Component\Console\Application->doRun() dev_path\sf2testdev\vendor\symfony\symfony\src\Symfony\Bundle\Framework Bundle\Console\Application.php:80 PHP 5. Symfony\Component\Console\Application->doRunCommand() dev_path\sf2testdev\vendor\symfony\symfony\src\Symfony\Component \Console\Application.php:184 PHP 6. Symfony\Component\Console\Command\Command->run() dev_path\sf2testdev\vendor\symfony\symfony\src\Symfony\Component\Cons ole\Application.php:899 PHP 7. Sensio\Bundle\GeneratorBundle\Command\GenerateDoctrineEntityCommand->execute() dev_path\mesf2testdev\vendor\symfony\symf ony\src\Symfony\Component\Console\Command\Command.php:244 PHP 8. Sensio\Bundle\GeneratorBundle\Generator\DoctrineEntityGenerator->generate() dev_path\sf2testdev\vendor\sensio\generato r-bundle\Sensio\Bundle\GeneratorBundle\Command\GenerateDoctrineEntityCommand.php:98
Alors je me met dans une colère noire, vu que moi j'ai besoin de la générer quand même cette entité ! Elle est longue en plus, j'ai une quinzaine d'attributs, j'ai pas envie de me la taper à la main quoi...
Bref voila la solution...
Ca vient d'ou ?
La mistake (comme on l'appelle dans le jargon de codeur un peu américain) se trouve dans le fichier Symfony/vendor/sensio/generator-bundle/Sensio/Bundle/GeneratorBundle/Generator/DoctrineEntityGenerator.php au niveau de la méthode generate(). La méthode de l'objet $config appelée est getAliasNamespaces() alors qu'il faut appeler getEntityNamespaces() !
Fixer comme un bourrin
//Sensio/Bundle/GeneratorBundle/Generator/DoctrineEntityGenerator.php public function generate(BundleInterface $bundle, $entity, $format, array $fields, $withRepository) { // configure le bundle (nécessaire si il ne contient pas encore d'entités) $config = $this->registry->getManager(null)->getConfiguration(); $config->setEntityNamespaces(array_merge( array($bundle->getName() => $bundle->getNamespace().'\\Entity'), // $config->getAliasNamespaces() ...erreur à remplacer par : $config->getEntityNamespaces() )); //... }
Fix the beugue with composer update
Bon mais sinon , on ne vous a jamais dit de ne jamais toucher aux vendors directement ? ah ba si ! Bon alors faut pas modifier le fichier directement hein ?! Le bug a été fixé et il faut malgré tout faire confiance (oui des fois c'est dur) à notre ami composer pour régler le problème. Si on "php composer.phar update" comme un bourrin sur le projet ça ne changera rien, il faut spécifier quelle branche du sensio/generator-bundle on veut vraiment upgrader dans le composer.json. J'ai essayé plein de trucs, ">2.3.0", "2.3.*", "*", mais rien ne fonctionnait.
php composer.phar update Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Writing lock file Generating autoload files Updating the "app/config/parameters.yml" file. Bla bla bla...
"sensio/generator-bundle": "dev-master"
Alors un vieux sage m'a dit d'essayer avec "dev-master", et miracle, removing, installing, cloning !
Et paf, ca marche nickel ! C'est surement le temps que ca passe sur la branche master, à mon avis d'ici quelques heures/jours un simple composer.phar update fera l'affaire pour virer ce vilain petit bug...
"require": { // ... "sensio/generator-bundle": "dev-master", // ... },
Voila ce que ca a donné chez moi a l'heure ou j'écris ce post
php composer.phar update Loading composer repositories with package information Updating dependencies (including require-dev) - Removing sensio/generator-bundle (v2.3.0) - Installing sensio/generator-bundle (dev-master de7e174) Cloning de7e174440acce7319fb26c3fc23081f962cb98f Writing lock file Generating autoload files Updating the "app/config/parameters.yml" file. Clearing the cache for the dev environment with debug true Installing assets using the hard copy option Installing assets... etc etc
Problème réglé ! youhouuuu !
Do you want to generate an empty repository class [no]? yes Summary before generation You are going to generate a "TestMonBundle:Zobdebouc" Doctrine2 entity using the "annotation" format. Do you confirm generation [yes]? Entity generation Generating the entity code: OK You can now start using the generated code!
Retour a la liste