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

star

07 Juin 2013

[bug sf2.3] call to undefined method doctrine orm configuration getaliasnamespaces()

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!

Merci pour le +1

Auteur de l'article
Retour a la liste