Pr.
Sonia SOUABI
Framework Symfony :
1- L’architecture MVC :
L'architecture Modèle/Vue/Contrôleur (MVC) est une façon d'organiser une interface
graphique d'un programme. Elle consiste à distinguer trois entités distinctes qui sont, le
modèle, la vue et le contrôleur ayant chacun un rôle précis dans l'interface.
L'organisation globale d'une interface graphique est souvent délicate. Bien que la façon
MVC d'organiser une interface ne soit pas la solution miracle, elle fournit souvent une
première approche qui peut ensuite être adaptée. Elle offre aussi un cadre pour structurer
une application.
Dans l'architecture MVC, les rôles des trois entités sont les suivants.
modèle : données (accès et mise à jour)
vue : interface utilisateur (entrées et sorties)
contrôleur : gestion des événements et synchronisation
2- Framework SYMFONY :
La framework Symfony est parmi les frameworks les plus connus en PHP. Il permet
d’appliquer l’architecture MVC en travaillant avec plusieurs dossier : Dossier « src » et
dossier « Templates ». Voici ci-joint un apercu sur l’architecture du framework.
Dans Symfony, nous allons travailler avec deux dossiers : dossier « src » et dossier
« templates ». Le dossier « src » présente la partie contrôleurs et base de données de
l’architecture MVC, tandis que le dossier « templates » présente la partie vue.
Dossier "src" Dossier "Templates" Dossier "Config"
•Dossier "Controller": •Pour créer les vues, il •Pour configurer les
Pour créer les est contient des vues routes et les packages.
contrôleurs. sous forme de fichier
•Dossier "Entity": Pour .[Link]
définir la structure de
la base de données.
•Dossier "Repository":
Pour définir les
fonctions appliquées
sur une entité.
Pour manipuler le framework , on va aborder tout d’abord trois parties : partie contrôleur,
partie route et partie vue.
2-1- Partie « Contrôleur » :
Il y a deux facons possibles pour créer un contrôleur : automatiquement ou manuellement.
2-1-1- Création de contrôleur manuellement :
Pour créer un contrôleur il faut suivre les étapes suivantes :
Dossier « src » Dossier « Controller » New file Créer un
fichier .php
Pour créer un contrôleur, il faut respecter plusieurs règles :
Choisir un nom du fichier .php qui se termine avec le mot Controller, exemple :
FirstController, SecondController…
Le nom de la classe du contrôleur doit prendre le même nom que le fichier,
exemple : class FirstController, class SecondController…
Il faut faire appel aux différents éléments intégrés du framework dont vous allez
avoir besoin pour créer votre contrôleur, exemple :
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
Exemple de creation d’un contrôleur:
Dans cet exemple, nous avons créé un contrôleur nommé : [Link] qui
contient une fonction retournant une réponse (Response).
2-1-1- Création de contrôleur automatiquement :
Pour créer un contrôleur automatiquement, nous suivons les étapes :
Vscode Terminal exécuter la commande : php bin/console make :controller
NomController
Une fois le contrôleur automatique créé, deux fichier sont générés automatiquement :
Fichier 1 au niveau du dossier Controller : [Link]
Fichier 2 au niveau du dossier templates : [Link]
2-2- Les routes :
C’est quoi une route ? L'objectif du routeur est de dire à Symfony ce qu'il doit faire
lorsque l'on appelle l'URL /hello-world (par exemple). Chaque contrôleur doit être lié à
une route. Pour créer une route, il existe plusieurs facons :
Créer une route par attributs : c’est lorsqu’on intégre la route au sein de notre
contrôleur, exemple : #[Route('/blog', name: 'blog_list')]. C’est la méthode la plus
recommandée à utiliser.
Créer une route indépendement des contrôleurs dans un fichier isolé : Dans ce cas,
on part vers le dossier « Config », on crée sois un fichier [Link] si on veut
utiliser la configuration par le langage yaml, [Link] si on veut utiliser la
configuration par le langage xml,ou [Link] si on veut utiliser la configuration
par le langage php (voir TP 1 sur les routes).
2-3- Response/Request :
L’objet Response définit la réponse à envoyer au navigateur client. Pour utiliser
le Response, il faut nécessairement faire appel à l’élément HttpFoundation par :
use Symfony\Component\HttpFoundation\Response.
Il s’agit en fait d’un objet instancié à partir de la classe Request. Un objet Request
contient des informations sur la demande du client. Pour utiliser le Response, il
faut nécessairement faire appel à l’élément HttpFoundation par : use
Symfony\Component\HttpFoundation\Request. Par la suite, des exemples vont
être illustrés.
2-4- dossier « Templates » :
Maintenant, on va passer à la partie suivante en relation avec la vue de notre projet
créé dans le dossier « Templates ». L’objectif ici est de créer une vue et faire appel à
cette vue au sein de notre contrôleur en utilisant : $this->render.
Pour créer une vue, nous allons devoir tout d’abord créer un dossier « test » au sein
du dossier « templates », ensuite nous allons créer au sein de ce dossier un fichier
« [Link] ». On a ici deux extensions : extension html et extension twig. C’est
quoi le twig et pourquoi utiliser le twig ? Twig est un langage qui vient s’ajouter au
code HTML dans les vues des traitements de code. La syntaxe est séparée en trois
parties :
{{ ...}} : utilisé pour afficher le contenu d’une variable ou le résultat de
l’évaluation d’une expression.
{% ... %} : utilisé pour exécuter une structure de contrôle (if, foreach…).
{# ... #} : utilisé pour ajouter des commentaires (ces commentaires ne seront
pas visibles sur la page HTML générée.
Maintenant, créons notre vue et notre contrôleur qui sera lié à cette vue. La première
étape consiste à créer notre vue :
Dossier « Templates » Créer un dossier « test » (vous pouvez choisir un autre
nom)
Créer une vue : « [Link] » (vous pouvez choisir un autre nom, mais
gardez la même extension).
Exemple d’une vue :
Comme déjà cité, le fichier de la vue contient le HTML combiné avec le TWIG, soit pour
ajouter des commentaires, soit pour afficher des variables, soit pour insérer des structures
de commande.
La deuxième étape consiste à créer le contrôleur qui va faire appel à cette vue. Pour cela,
on va créer le contrôleur [Link] dans le dossier « Controller » du dossier
« src ».
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class TestController extends AbstractController
{
#[Route('/hello/{age}/{nom}/{prenom}', name: 'hello')]
public function hello(Request $request, int $age, $nom, $prenom)
{
return $this->render('test/[Link]', [
'nom' => $nom,
'prenom' => $prenom,
'age' => $age
]);
Remarques : Pour faire appel à la vue correspondante, on utilise : return $this->render,
sans oublier qu’il faut définir les variables exploités dans la partie vue dans notre
contrôleur.
Exemple d’une vue avec une condition twig :
2-5- L’héritage et l’inclusion d’une vue :
2-5-1- L’héritage
Au lieu de copier-coller les mêmes éléments plusieurs fois, il est plus judicieux de définir
une vue squelette dont vont hériter toutes les autres vues. C’est ce qu’on appelle l’héritage
d’une vue. Exemple :
2-5-2- L’inclusion d’une vue
L’inclusion d’une vue est lorsqu’on inclut une vue au sein d’une autre en utilisant la
syntaxe suivante :
De vue, l’inclusion ressemble à l’héritage. Mais dans l’hritage, on hérite généralement
d’une vue qui peut inclure plusieurs d’autres vues, mais on inclut une vue qui n’inclut
aucune autre vue, ou bien une vue qui sera indépendante.