Doctrine2 : récupérer le nom d'une entité

Avec Doctrine2, pour retrouver une entité, on a plusieurs méthodes qui prennent en argument un nom d'entité. Par exemple :

<?php
$post 
$em->find('Entities\\Post'1);
?>

Je n'aime pas trop mettre le nom de l'entité dans une chaîne littérale. Si j'ai besoin de le modifier, je vais devoir faire un rechercher/remplacer sur tout le projet. J'ai donc trouvé l'astuce suivante. Sur mes entités, j'ajoute une méthode statique :

<?php
/**
 * @Entity
 */
class Post
{
    public static function 
getEntityName()
    {
        return 
get_called_class();
    }
}
?>

Mise à jour du 18/02/2012 : utilise get_called_class à la place de __CLASS__, ce qui permet à la méthode statique de continuer à fonctionner correctement dans une classe dérivée.

Je peux ensuite l'utiliser comme ceci :

<?php
$post 
$em->find(Post::getEntityName(), 1);
?>

Je peux ainsi utiliser la fonction Renommer de mon IDE pour changer en toute sécurité le nom de ma classe.

Bien sur, ça pollue un peu ma classe, mais bon comme c'est difficile de donner un nom aux choses, c'est toujours intéressant de se garder la possibilité de les renommer facilement.

Etiquettes:

Add new comment