Symfony 2
est un framework web permettant de réaliser des applications web en PHP.
Symfony est l’un des meilleurs Framework mondiaux avec Rails (ruby) et Django (python).
D'après son créateur Fabien Potencier, Symfony 2 est en fait plus un rassemblement de bibliothèques et de composants tous fortement découplés assemblées et paramétrés pour fonctionner ensemble.
Donc qu'est-ce que Symfony2 ?
Les Composants Symfony2
Premièrement, Symfony2 est une collection de plus de vingt bibliothèques indépendantes qui peuvent être utilisées dans n'importe quel projet PHP.
Ces bibliothèques, appelées les Composants Symfony2, contiennent des choses utiles en toute situation, quelle que soit la manière dont votre projet est développé.
Pour en nommer quelques-unes :
HttpFoundation
Contient les classes Request et Response, ainsi que d'autres classes pour la gestion des sessions et des uploads de fichiers.
Routing
Un puissant et rapide système qui vous permet de lier une URI spécifique (par exemple: /contact) à l'information lui permettant de savoir comment gérer cette requête (par exemple: exécute la méthode contactAction() ).
Form
Un framework complet et flexible pour la création de formulaires et la gestion de la soumission de ces derniers.
Validator
Un système permettant de créer des règles à propos de données et de valider ou non les données utilisateurs soumises suivant ces règles.
ClassLoader
Une bibliothèque pour le chargement automatique (« autoloading ») qui permet aux classes PHP d'être utilisées sans avoir besoin d'inclure (« require ») manuellement les fichiers contenant ces dernières.
Templating
Une boîte à outils pour afficher des templates, gérer leur héritage (c-a-d qu'un template est décoré par un layout) et effectuer d'autres tâches communes aux templates.
Security
Une puissante bibliothèque pour gérer tous les types de sécurité dans une application.
Translation
Un framework pour traduire les chaînes de caractères dans votre application.
En quoi Symfony2 tient ses promesses
-Votre application est constituée de code clair et bien organisé .
-100% du code que vous écrivez est pour votre application.
-Symfony2 vous donne accès à des outils open source comme Doctrine et le composants de templates, de sécurité, de formulaires, de validation et de traduction.
-Une communauté active qui utilise le framework et qui contribue en retour.
-De nombreux bundles open-source peuvent être trouvés, ils sont notamment regroupés sur KnpBundles.
-Une documentation de qualité et régulièrement mise à jour.
Architecture des fichiers d'une application
Symfony2
app
logs
resources
cache
config
src
Bundles
controller
entity
recources
views
config
public
tests
vendor
Symfony
Doctrine
Twig
SwiftMailer
...
web
Bundles (symlink)
app.php (front controller)
app_dev.php (Dev front controller)
Controller
EventController.php
Event.php
Routing
Kernel Symfony
app.php
http://www.happyevents.com/event/show/5
Le Déroulement d'une Application Symfony
M
odel
View
Contrôleurs
Les
contrôleurs
sont des fonctions généralement regroupées dans des classes par "thème" qui génèrent une réponse à partir d'une requête:
Le but d'un contrôleur est toujours le même : créer et retourner un objet Response. Durant ce processus, il peut lire des informations dans la requête, charger une ressource depuis la base de données, envoyer un email, ou définir une variable dans la session de l'utilisateur. Mais dans tous les cas, le contrôleur va finalement retourner l'objet Response qui sera délivré au client.
Routage
Le
routage
est le fait d'écrire des règles pour associer des URLs à ces actions.
Plusieurs possibilité : yml, xml et annotation.
Symfony vous propose d'utiliser massivement les annotations, il s'agit en fait de commentaires que vous pouvez ajouter au dessus de classes ou méthodes qui vous permettent d'ajouter des informations.
Par exemple, il est possible de configurer le routage de cette manière:
Dans cet exemple, nous décrivons au routeur que les URLs de la forme
/hello/quelquechose
devra utiliser la méthode
helloAction($name)
pour générer la réponse, en passant le
quelquechose
en
$name
Twig
Symfony 2 est livré avec un très bon système de templates nommé
Twig
.
C'est un script qui permet d'utiliser des templates, c'est-à-dire des fichiers qui ont pour but d’afficher le contenu de votre page HTML de façon dynamique mais sans PHP, en utilisant leur propre langage.
Le premier objectif est de séparer la couche de présentation des applications web.
Twig offre une meilleure
Lisibilité :{{
mavar
}} à la place de <?php
echo $mavar
; ?>
Ré-utisabilité :
héritage entre Template.
Sécurité:
variables protégées.
Afficher une variable
Afficher une $var : {{ pseudo }}
L’index d’un array(): {{ user[‘id’] }}
Getter $object->getAttribut(): {{ user.id }}
$var avec filtre : {{ pseudo|upper }}
Date (datetime) : {{ date|date(‘d/m/Y’) }}
Concaténer : {{ nom ~ " " ~ prenom }}
Remarque:
Twig
protège par défaut les
$var
donc si on veut afficher l’html :
{{ var_html|raw }}
Pour insérer des variables globales il est possible de le faire dans :
app/config/config.yml
# app/config/config.yml
twig :
globals :
copyright : Rencontre-Ados
Ce qui donnera dans le template twig :
Conditions & boucles
Un simple exemple d'include:
Les blocs peuvent alors être surchargés. Il est aussi possible d'utiliser le mot clé
parent()
pour faire appel à la template mère et utiliser son contenu, comme dans le cas du titre de ce exemple.
La template précédente peut être héritée comme cela:
Hériter et inclure des templates
Voici un exemple de template:
{% block contents %} :est un bloc qui pourra être surchargé dans les templates filles.
{% block('title') %} : sert à ré-afficher le contenu du block title précédement utlisé.
Doctrine2
Pour gérer la persistance en base de données, Symfony2 intègre la célèbre bibliothèque
Doctrine2
,
très ressemblante à Hibernate, un outil provenant du monde Java.
Cet outil permet de faire abstraction des accès à la base de données, de réaliser des requêtes, mais surtout de faire le lien (on parle de "mappage") entre le monde relationnel de votre base de données et le monde objet (on parle alors d'
ORM
).
Les enregistrement de votre base de données seront mis en correspondance avec les objets que vous manipulez.
Ainsi, au lieu de penser à votre base de données, vous n'avez qu'à penser objet. Si vous souhaitez par exemple manipuler des produits, vous écrirez:
Ceci est une classe simple qui définit votre objet, vous pourriez l'écrire et l'utiliser dans n'importe quel contexte.
Le principe maintenant n'est pas d'agir au niveau du fonctionnement de cette classe, mais de fournir des informations à Doctrine2 pour qu'il puisse savoir comment persister et récupérer des produits dans la base de données, c'est ce que l'on appelle le mapping, ou mapage.
Il est par exemple possible dans Symfony2 de réaliser ce mappage à l'aide d'annotations:
Ici, le commentaire au dessus du texte est en fait lu et utilisé par Doctrine2 pour savoir comment faire correspondre l'atribut $name avec la base de données.