Académique Documents
Professionnel Documents
Culture Documents
Accueil > Cours > Construisez un site web à l’aide du framework Symfony 5 > Réalisez votre première page
20 heures Moyenne
Mis à jour le 08/07/2022
06:25
Nous l'avons vu en introduction, Symfony est un framework basé sur le processus HTTP
requête/réponse. Mais comment cela fonctionne-t-il ? Ensemble, nous allons reprendre ce
paradigme fondamental du web et voir comment il est intégré par le framework.
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5489663-realisez-votre-premiere-page 1/10
18/07/2022 07:14 Réalisez votre première page - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
Bien que cela semble compliqué, c'est en réalité très simple : le rôle d'un serveur web est toujours
de retourner une réponse à l'utilisateur.
En "langage" HTTP, voici l'équivalent de la requête d'un utilisateur qui accéderait au site
d'OpenClassrooms :
GET / HTTP/1.1
Host: openclassrooms.com
Accept: text/html
User-Agent: Mozilla/5.0 (Macintosh)
Cette simple requête contient l'information nécessaire pour permettre au serveur de retourner
une réponse :
la première ligne contient la méthode HTTP (ici "GET") ainsi que l’URL (ici "/") ;
la deuxième ligne contient le type de contenu attendu, ici du HTML ;
la troisième informe le serveur du navigateur utilisé (ici, Mozilla Firefox sur Mac OSX).
Il existe plusieurs méthodes HTTP pour accéder à une ressource, voici les plus importantes : GET,
POST, PUT et DELETE.
Si vous souhaitez en savoir plus sur les différentes méthodes HTTP, n'hésitez pas à suivre le
cours Utilisez des API REST.
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5489663-realisez-votre-premiere-page 2/10
18/07/2022 07:14 Réalisez votre première page - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
Une fois que le serveur sait exactement quelle ressource l'utilisateur (on dit parfois "client")
souhaite et sous quelle forme, il peut retourner ce résultat sous forme de réponse HTTP, tel
qu'illustré dans le schéma suivant :
Traduit en "langage" HTTP, voici l'équivalent d'une réponse retournée par un des serveurs
d'OpenClassrooms :
HTTP/1.1 200 OK
Date: Sat, 28 Jul 2018 21:05:05 GMT
Server: cloudfare
Content-Type: text/html
<html>
<!-- ... HTML de la page d'accueil d'OpenClassrooms -->
</html>
La réponse retournée à l'utilisateur est une page HTML contenant la page d'accueil
d'OpenClassrooms. Sur la première ligne, une information est particulièrement importante,
puisqu'elle indique le code de statut HTTP : ici 200 (OK). De très nombreux statuts existent, parmi
les plus connus :
Un développeur web doit avoir une bonne connaissance des principaux codes d'état HTTP
; vous trouverez la liste exhaustive sur Wikipedia.
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5489663-realisez-votre-premiere-page 3/10
18/07/2022 07:14 Réalisez votre première page - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
Le PHP est un langage de programmation serveur pour le web, il est donc assez facile de
récupérer des informations du client et de retourner une réponse. Par exemple, le code suivant
récupère des informations de la requête utilisateur et retourne une réponse au format HTML :
php
1 <?php
2
3 // en utilisant l'url localhost?name=Lea
4
5 header('Content-Type: text/html');
6 echo '<html>';
7 echo '<body>Bonjour '. $name . '</body>';
8 echo '</html>'
9
HTTP/1.1 200 OK
Date: Sat, 28 Jul 2018 02:14:33 GMT
Server: Apache/2.2.17 (Unix)
Content-Type: text/html
<html>
<body>Bonjour Léa</body>
</html>
Ce simple programme écrit en PHP est bien capable d'agir en tant que serveur HTTP et de
retourner une réponse.
La classe Request
La classe Request permet de centraliser l'accès à toutes les super variables de PHP en une seule
classe utilitaire.
php
1 <?php
2 use Symfony\Component\HttpFoundation\Request;
3
4 // Récupération des valeurs accessibles dans les super variables
5 $request = Request::createFromGlobals();
6
7 // Récupérer l'url
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5489663-realisez-votre-premiere-page 4/10
18/07/2022 07:14 Réalisez votre première page - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
8 $request->getPathInfo();
9
10 // récupérer des attributs en GET ou POST
11 $request->query->get('name');
12 $request->request->get('name', 'nom par défaut');
13
14 $request->getMethod(); // e.g. GET, POST, PUT, DELETE ou HEAD
15
La classe Response
La classe Response permet de retourner une réponse à l'utilisateur valide en termes de langage
HTTP.
1 <?php
2 use Symfony\Component\HttpFoundation\Request;
3 use Symfony\Component\HttpFoundation\Response;
4
5 $request = Request::createFromGlobals();
6 $name = $request->get('name');
7 $response = new Response();
8
9 $response->setContent(
10 '<html><body>Hello'
11 . $name
12 .'</body></html>'
13 );
14 $response->setStatusCode(Response::HTTP_OK);
15 $response->headers->set('Content-Type', 'text/html');
16
17 // Retourne une réponse HTTP valide
18 $response->send();
Finalement, récupérer les informations de la requête et retourner une réponse est assez simple.
La complexité d'une application web vient après, quand il va falloir appeler l'action
correspondante en fonction de l’URL . Pour ce faire, nous avons besoin d'un contrôleur "front" ou
frontal : il est en charge de récupérer les informations de la requête et d'exécuter l'action
correspondante qui retournera une réponse.
1 <?php
2 // index.php
3 use Symfony\Component\HttpFoundation\Request;
4 use Symfony\Component\HttpFoundation\Response;
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5489663-realisez-votre-premiere-page 5/10
18/07/2022 07:14 Réalisez votre première page - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
5
6 $request = Request::createFromGlobals();
7 $url = $request->getPathInfo();
8 $response = new Response();
9
10 switch($url) {
11 case '/':
12 $response->setContent('Accueil');
13 break;
14 case '/admin':
15 $response->setContent('Accès Espace Admin');
16 break;
17 default:
18 $response->setStatusCode(Response::HTTP_NOT_FOUND);
19 }
20
21 $response->send();
1 <?php
2 // src/Controller/HelloController.php
3 namespace App\Controller;
4
5 use Symfony\Component\HttpFoundation\Request;
6 use Symfony\Component\HttpFoundation\Response;
7 use Symfony\Component\Routing\Annotation\Route;
8 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
9
10 class HomeController extends AbstractController
11 {
12 /**
13 * Page d'accueil
14 *
15 * @Route('/home', name='accueil')
16 */
17 public function home()
18 {
19 return new Response(" Bienvenue sur la page d'accueil ! ");
20 }
21
22 /**
23 * Page d'accès à un article
24 *
25 * @Route('/article/{articleId}', name='show-article')
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5489663-realisez-votre-premiere-page 6/10
18/07/2022 07:14 Réalisez votre première page - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
26 */
27 public function show($articleId)
28 {
29 // Nous retrouvons la valeur de la variable $articleId à partir de l'URI
30 // Par exemple /article/1234 => $articleId = '1234'
31
32 return new Response(" Voici le contenu de l'article avec l'ID $articleId ");
33 }
34 }
35
Ici, l'annotation Route s'utilise dans un bloc de commentaire particulier (il commence par 2
astérisques) et permet de définir les paramètres et contraintes de la route pour laquelle l'action
(ici home() ou showBlogPost($articleId) ) se déclenchera.
Le premier argument est la route en elle-même qui accepte des expressions régulières très
puissantes !
1 <?php
2
3 /**
4 * @Route(
5 * "/article/{articleId<\d+>}",
6 * name="show-article",
7 * methods={"GET"}
8 * )
9 */
10 public function show($articleId = 1)
11 {
12 // ...
13 }
la valeur de $articleId passé en paramètre de l’URL doit forcément être un entier supérieur ;
la valeur par défaut si non trouvé est 1 ;
et la méthode d'accès HTTP doit être GET.
Mais ce qu'il manque ici pour bien comprendre ce qu'il se passe "sous le capot", c'est comment
un contrôleur Symfony va avoir accès à la requête de l'utilisateur. Car, contrairement à l'exemple
utilisant PHP, les contrôleurs Symfony ne sont pas des contrôleurs frontaux, ils ne sont pas en
charge d'écouter directement la requête utilisateur.
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5489663-realisez-votre-premiere-page 7/10
18/07/2022 07:14 Réalisez votre première page - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
Voici un exemple minimaliste de code fonctionnel pour la création d'un contrôleur frontal avec
Symfony, vous pouvez jeter un œil à celui fourni dans l'application de démonstration du projet.
php
1 <?php
2
3 use Symfony\Component\HttpFoundation\Request;
4
5 require __DIR__.'/../vendor/autoload.php';
6
7 $environment = 'prod';
8 $debugEnabled = false;
9
10 $kernel = new AppKernel($environment, $debugEnabled);
11
12 $request = Request::createFromGlobals();
13 $response = $kernel->handle($request);
14 $response->send();
15 $kernel->terminate($request, $response);
16
C'est ce kernel qui - entre autres responsabilités que l'on découvrira ensemble lors de ce
cours - appellera la bonne action de contrôleur et retournera une réponse à l'utilisateur.
En résumé
Le framework Symfony est construit autour du paradigme fondamental du web : un utilisateur
fait une requête et le serveur (ici, Symfony) doit retourner une réponse.
Dans la très grande majorité des applications, la réponse du serveur sera différente selon l’URL à
laquelle il sera accédé et fera appel à une fonction différente pour retourner un résultat.
Un contrôleur Symfony peut être une simple fonction d'une classe PHP et il est possible de
configurer le routing à l'aide d'annotations PHP même si d'autres formats de déclaration sont
possibles.
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5489663-realisez-votre-premiere-page 8/10
18/07/2022 07:14 Réalisez votre première page - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
Le framework Symfony non seulement a un composant pour gérer le routing, mais fournit aussi
un contrôleur frontal en charge de recevoir toutes les requêtes de l'utilisateur et de trouver la
bonne action (fonction) du contrôleur à exécuter.
Dans le prochain chapitre, nous allons explorer deux autres composants fondamentaux du
framework Symfony : DependencyInjection et EventDispatcher qui vont nous aider à développer
des applications plus robustes, plus flexibles et plus faciles à maintenir. À tout de suite !
Le professeur
Mickaël Andrieu
Consultant et Formateur Web / Data
OPENCLASSROOMS
OPPORTUNITÉS
AIDE
EN PLUS
Français
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5489663-realisez-votre-premiere-page 9/10
18/07/2022 07:14 Réalisez votre première page - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5489663-realisez-votre-premiere-p… 10/10