Atelier Framework Web Côté Serveur
TP N° 2
Les Bases de Symfony
Objectifs
• Découvrir l’architecture d’un projet Symfony et son principe de fonctionnement,
• Découvrir la structure des fichiers PHP sous Symfony (namespace, Class, use, …)
• Créer un Bundle et découvrir son architecture,
• Découvrir les Contrôleurs et les Routes.
1. Institut Supérieur des Etudes Technologiques de Jendouba
Département Technologies de l’Informatique
2ème
année Licence Appliquée
Amir Souissi
Atelier Framework Web Côté Serveur
TP N° 2
Objectifs
• Découvrir l’architecture d’un projet Symfony et son principe de fonctionnement,
• Découvrir la structure des fichiers PHP sous Symfony (namespace, Class, use, …)
• Créer un Bundle et découvrir son architecture,
• Découvrir les Contrôleurs et les Routes.
1. Architecture des fichiers d’un Projet Symfony
Arborescence et principaux dossiers dans un projet Symfony :
2. Architecture Conceptuelle de Symfony
2. Le design pattern MVC utilisé par Symfony consiste à diviser notre application en 3 couches :
Le Modèle : s’occupe de tout ce qui touche aux données. Il s’occupe de l’interaction avec la BD :
Ajout, suppression, mise à jour ou lecture d’une données ainsi que vérifier l’intégrité des données.
La Vue : contient l’aspect visuel du site. Définit des gabarits de pages HTML dans lesquels on glisse
des données dynamiques.
Le Contrôleur : contient la logique de l’application. Il fait appel à la fois au modèle et la vue pour
restituer une réponse.
ACTIVITE 1 :
1. Déterminer le nom et l’emplacement du contrôleur par défaut créé dans un projet Symfony vide ?
…………………………………………………………………………………………………….
2. Déterminer l’emplacement de la page de démarrage de Symfony dans l’arborescence du projet ?
…………………………………………………………………………………………………….
3. PHP en Symfony
En Symfony, l’autoloading permet de charger une page PHP de manière automatique. Pour chaque
nouveau fichier PHP à créer ultérieurement, il faut respecter les contraintes suivantes :
• Le nom du fichier doit correspondre au nom de la classe qu’il contient.
• Chaque fichier PHP doit contenir un namespace. Le namespace doit correspondre à
l’arborescence du fichier dans le dossier src.
ACTIVITE 2 :
On désire créer un fichier conforme avec les conventions imposées par l’autoloading.
< ?php
namespace AppBundleScript ;
Class Test {
}
1. Quel est l’emplacement de ce fichier ? ………………………………………………………..
2. Comment doit s’appeler notre nouveau fichier ? ………………………………………………
3. Créer ce nouveau fichier dans son emplacement approprié.
ACTIVITE 3 :
<?php
namespace ………………………………………………………………………………………
use …………………………………………………………………………………………………………………………………………………………
class ……………………………………………………………………………… extends …………………………………………
{
public function indexAction()
{
}
}
1. Compléter le code de la page DefaultController.php pour qu’il soit conforme.
2. A quoi sert l’instruction use dans ce cas ? ………………………………………………………..
3. 4. Les Bundles
Sous Symfony, tout est bundle. Il s’agit du Framework lui-même, du debugger, le moteur de rendu, …
Les bundles sont des briques logicielles que l’on peut assimiler à des plugins. Un bundle peut contenir
des contrôleurs, les vues, les modèles, de la configuration et également des fichiers de types js, css, .
En résumé tout le code rédigé dans Symfony se trouvera dans un bundle.
a. Créer un bundle par la console
Pour créer un nouveau bundle par la console, on suit les étapes suivantes :
1. Se placer sous la racine du projet Symfony. (Exemple : C:wampwwwTestSymfony1)
2. Taper la commande : php bin/console generate:bundle
3. Partager le Bundle pour le réutiliser à travers plusieurs applications : par défaut (No)
4. Nom du bundle : FrontBundle
5. Répertoire cible : par défaut (/src)
6. Format de configuration : par défaut (annotation)
Le nouveau bundle est créé : On peut le vérifier dans l’éditeur :
• Création d’un nouveau dossier FrontBundle sous /src avec un sous-dossier Controller et un
sous-dossier Resources.
• Le nouveau bundle est ajouté dans le noyau de Symfony pour qu’il soit chargé au démarrage.
On peut le vérifier dans le fichier AppKernel.php du dossier /app
• La configuration du Routing de notre bundle a été ajoutée dans le fichier Routing.yml du
dossier /app/config
b. Architecture d’un bundle
Le nouveau bundle créé contient :
1. Un dossier Controller. Il contiendra tous les Controller de notre bundle.
2. Un dossier Resources. Qui contient un sous-dossier Config : contient la configuration du
bundle, un sous-dossier Views qui contiendra les vues de notre bundle. Et finalement on a un
fichier FrontBundle.php qui représente notre bundle dans l’application Symfony.
3. Un contrôleur par défaut est généré par la ligne de commande DefaultController.php. on
supprime ce fichier pour avoir un bundle totalement vierge.
4. On supprime aussi le dossier Default du dossier FrontBundle/Resources/views
5. On obtient un bundle prêt à l’emploi.
ACTIVITE 4:
1. Créer un nouveau bundle nommé BackBundle
2. Faites que ce bundle soit vierge et prêt à l’emploi
4. 5. Créer une page : Route et Contrôleur
Pour afficher une page, il nous faut 3 parties :
- Un Contrôleur
- Une action de contrôleur
- Une vue
Dans un Bundle, les contrôleurs se trouvent dans le Répertoire Controller du Bundle.
Un Contrôleur est une Classe PHP. A l’intérieur du cette classe, on peut définir des actions
qui nous permettrons de relier des fonctionnements pour faire des affichages.
Il est conseillé de regrouper les fonctionnalités communes par Contrôleur (gestion des
factures, gestion des utilisateurs, …)
Pour que le contrôleur soit utilisable, il manque l’étape de Routing. Le Routing est un élément dans
Symfony qui fait la correspondance entre une URL et un Controller.
ACTIVITE 5:
On désire créer notre propre Contrôleur. Lorsqu’on se pointe sur /hello, on veut générer une
page qui affiche le mot « Hello World ! ».
1. Créer un nouveau fichier nommé HelloController.php sous AppBundle/Controller.
2. Taper le code de ce Contrôleur :
<?php
namespace ………………………………………………………………………;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAnnotationRoute;
class …………………………………………………………………………………
{
/**
* @Route("/hello")
*/
public function MonAction1()
{
return new Response(
'<html> <body> Hello World ! </body> </html>'
);
}
}
3. Visualiser le contenu de votre page en ajoutant l’URL :
http://localhost/TestSymfony1/web/app_dev.php/hello
4. Ajouter une deuxième action nommée MonAction2 qui permet d’afficher la page
contenant « Bonjour ! » lorsqu’on se pointe sur l’URL :
http://localhost/TestSymfony1/web/app_dev.php/bonjour
5. Quel est l’annotation de la route qu’il faut ajouter au-dessus de l’action 2 ?
…………………………………………………………………………………………
6. Trouver le chemin du dossier général de configuration des Routes en Annotation.
…………………………………………………………………………………………
7. Modifier ces Routes de manière à ce qu’ils deviennent : /hello/fr et /hello/en
8. Quel est la différence entre l’utilisation de app.php et app_dev.php ?