Blog / Article #26
[bug SF2.3] Call to undefined method Doctrine ORM Configuration getAliasNamespaces()

star

07 Juin 2013
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!
Publié le 07/06/2013 · 4 min de lecture Partager X LinkedIn

← Précédent [fosuserbundle] trier ses users alphabétiquement dans son interface admin Suivant → Proteger votre adresse mail des spammeurs grace à une astuce css