[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 !