Le 24/03/2011 dans symfony

[Symfony2] Quelques protips / remarques pour débuter

J’ai l’occasion de pas mal jouer avec Symfony2 en ce moment, en plus d’avoir donné une conférence en début mars sur le sujet, je développe un petit site personnel.

Et il faut bien avouer que le la philosophie derrière SF2 est très loin de celle à laquelle nous somme habitué avec symfony. Bref les débuts vont être rudes.

Bien que la documentation soit pleine d’informations très utiles je voulais partager avec vous quelques points à prendre en compte, des erreurs que j’ai commise, des protips (ou pas) sur le développement d’une première application en Symfony2. Here we go.

Définir la collation (encodage des tables) dans Doctrine2

Il n’est pas possible de spécifier une Collation  (tel qu’on la connait dans MySQL) pour votre base de donnée ou vos table dans Doctrine2. Le DBAL connait la syntaxe mais les annotations correspondantes pour vos entities n’existent pas. Et la commande ./app/console doctrine:database:create ne sait pas ajouter une collation.
Donc si vous voulez utiliser une collation différente de la valeur par défaut de votre serveur MySQL, vous devez créer la base de donnée à la main. Les tables hériterons de la collation de la base de donnée.
Si vous utilisez UTF8, n’oubliez pas d’ajouter l’option « charset » dans la configuration de votre connexion au dbal.

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                charset:  utf8

Le cache des métadonnées

Si vous vous souciez ne serait-ce qu’un peu des performances de votre applicatif, vous devez activer le cache APC à la main :

doctrine:
    orm:
        entity_managers:
            default:
                metadata_cache_driver: apc

C’est très bien mais sachez que n’importe quelle modification d’annotation nécessitera de vider le cache APC. En général, on fait l’erreur UNE fois.

Attention aux copier/coller

Pour utiliser les annotations Doctrine2 dans Symfony2, il faut systématiquement les préfixer avec « orm: ». Le piège est que toute la documentation de Doctrine2 est dédiée à ce dernier, et ne prend pas du tout en considération le contexte dans lequel il est utilisé. Donc tous les exemples de la documentation sont sans le fameux préfix.

Utiliser une annotation non préfixé n’aura aucun effet, vous n’aurez ni erreur, ni fonctionnalité. Attention aux copier/coller donc !