Symfony ExpressionLanguage : Comment utiliser ce composant ?
Le composant Symfony ExpressionLanguage : qu'est-ce que c'est ? Quand et comment l'utiliser ? Comment créer des expressions lors de cas plus complexes ?
Sommaire
Si vous êtes courageux, vous aurez dans l'idée de vouloir passer à Symfony2.
Voici une petite liste non-exaustive des points de différences à connaître pour passer de Symfony1.x à Symfony2
Symfony 2, tout le monde en parle en ce moment, mais qu'est ce qu'il change exactement par rapport à la première mouture ?
Nous allons voir ici les trois grands changements de Symfony 2
Et oui, comme vous l'aurez surement vu/lu, Symfony 2 tourne exclusivement sous PHP 5.3 et plus. Mais en quoi cela est il important ?
Tout simplement parce que cette version de PHP apporte des fonctionnalités tout droit sortie du Java et quelque autre langage OO: les namespaces.
Hormis le côté "propreté du code", ce nouveau système est à la base de toute la nouvelle architecture de Symfony 2, les Bundles.
Un Bundle est au sens très large un module/plugin, c'est :
En fait, un Bundle c'est plus ou moins ce que vous décidez d'en faire. Certains auront pour envie de dire que cela ressemble aux "app" dans Sf1, d'autres au plugins.
Et oui, qui dit nouveau framwork, dit aussi nouvel ORM, et Symfony 2 intègre de base ... Doctrine 2 ! (Et oui, une autre version 2 :) )
C'est la partie la plus déroutante pour ceux qui veulent passer de SF1 à SF2. En effet, le passage de la version 1 à 2 de Doctrine a entraîné pas mal de modifications, tant au niveau du mapping en lui même de la donnée (les fameux schema.yml de Sf1) que des fonctions pour récupérer et travailler cette donnée.
Pour faire simple et court, il n'y a plus de notion de "Model" dans Sf2 mais d' "Entités" (Entities). Qu'est ce que cela apporte ? Un code plus clair mais une architecture beaucoup plus dense que Sf1 (et oui c'est possible).
Par exemple, vous n'aurez pas un fichier Yml pour la génération de votre base de données mais bien un fichier par Entité (par class en somme).
D'autre part, la synthaxe de ces fichiers de création d'entité a légèrement changée, surtout au niveau de la gestion des relations entre les objets de notre base de données.
Par exemple, là où vous auriez crée une table intermediaire pour créer une relation N-N entre deux objets en SF1, vous aurez simplement à décrire ce comportement grâce à des mots clefs propres à SF2:
User: type: entity manyToMany: groups: targetEntity: Group inversedBy: users joinTable: name: users_groups joinColumns: user_id: referencedColumnName: id inverseJoinColumns: group_id: referencedColumnName: id
Group: type: entity manyToMany: users: targetEntity: User mappedBy: groups
Vous pouvez retrouver toutes ces nouveautés sur la doc officielle de Doctrine 2
Et pour ce qui est de la récupération des données, tout se passe maintenant via l'utilisation d'une class EntityManager. C'est grâce à cette objet que vous pourrez créer votre propre requête, DQL par exemple, afin d'obtenir vos données tant convoitées. Exemple:
$em = $this->getDoctrine()->getEntityManager(); $myObjects= $em->getRepository('MyBundle:MyEntity')->findAll();
ou encore
$qb = $em->createQueryBuilder() ->select("d") ->addSelect("b") ->from('MyBundle:MyEntity', "d") ->leftJoin('d.other-entity', "b") ->getResult();
La dernière grosse modification de Sf2 est son nouveau moteur de template : TWIG
Twig est un moteur de template simple, plutôt rapide et sécurisé, ne permettant l'accès aux seuls éléments que ce que vous lui aurez préalablement passé. Twig est un autre projet développé et soutenu par Sensio et vient directement, concurrent d'autres technologies plus anciennes comme Smarty.
En gros, si vous le souhaitez, vous pouvez maintenant éliminer totalement de vos templates la moindre trace de code PHP, et utiliser toutes les fonctions de templating propre a twig comme les boucles, echo, if ....
Vous pouvez configurer le moteur de template que vous voulez utiliser directement dans l'action de votre page, ce qui permet de pouvoir utiliser Twig et PHP comme vous le souhaitez.
Symfony 2, c'est pas mal de nouvelles choses, je dirais même c'est assez différent de SF1. Si vous avez fait du Symfony 1, ne partez pas avec l'idée que le passage d'une version à une autre sera simple. D'autant plus que cette version du framwork intègre beaucoup de spécificités du langage Java comme les injections de dépendance, les déclarations de services ...
Si toutefois vous êtes determiné à passer à la nouvelle version, je vous invite à suivre le tuto Mon premier projet en Symfony 2 sur ce même blog :)
Auteur(s)
Rémy Jardinet
Architect @ Eleven Labs. Spécialisé dans la Data, l'IOT et les schémas avec des boiboites.
Vous souhaitez en savoir plus sur le sujet ?
Organisons un échange !
Notre équipe d'experts répond à toutes vos questions.
Nous contacterDécouvrez nos autres contenus dans le même thème
Le composant Symfony ExpressionLanguage : qu'est-ce que c'est ? Quand et comment l'utiliser ? Comment créer des expressions lors de cas plus complexes ?
Découvrez comment réaliser du typage générique en PHP : introduction et définition du concept, conseils et explications pas-à-pas de cas pratique.
Découvrez un cas d'usage d'intégration d'un CRM avec une application e-commerce, en asynchrone, avec Hubspot et RabbitMQ