
Maintenant que nous avons un projet prĂȘt Ă ĂȘtre utilisĂ©, il est temps de commencer Ă construire lâapplication de votre client. Ăa tombe bien, SĂ©bastien vous a envoyĂ© des wireframes créés par le graphiste de votre entreprise pour la page dâaccueil. AmĂ©lie souhaite que celle-ci soit en ligne au plus vite afin dâinformer le public de lâouverture prochaine de lâapplication.
Commencez par ouvrir un Ă©diteur de code dans le dossier  biblios qui vient dâĂȘtre créé. Voici la structure que vous devriez trouver :
biblios/
âââ assets
â âââ âŠ
âââ bin
â âââ console
â âââ âŠ
âââ config
â âââ packages
â âââ âŠ
â âââ routes.yaml
â âââ services.yaml
âââ migrations
âââ public
â âââ index.php
âââ src
â âââ Controller
â âââ Entity
â âââ Repository
â âââ Kernel.php
âââ templates
â âââ base.html.twig
âââ tests
âââ translations
âââ var
â âââ cache
â âââ log
âââ vendor
â âââ bin
â âââ composer
â âââ âŠ
âââ composer.json
âââ composer.lock
âââ âŠ
âââ symfony.lockVous nâavez pas Ă vous soucier de tout ce que vous voyez. Au dĂ©but, vous passerez lâessentiel de votre temps dans trois dossiers :
config , qui contient tous les fichiers de configuration de votre application ;
src , le dossier source dans lequel vous écrirez votre code PHP ;
templates , oĂč nous mettrons les pages HTML de notre site.Â
Ensuite, ouvrez un terminal et lancez la commande suivante :
symfony serve -d
Cette commande lance le serveur interne de test de PHP, ce qui vous permet de consulter votre toute nouvelle application. Pour cela, ouvrez votre navigateur prĂ©fĂ©rĂ© et entrez lâadresse qui vous a Ă©tĂ© retournĂ©e par la commande (normalement,  https://127.0.0.1:8000 ).
Cette page qui sâaffiche est la page dâaccueil de Symfony pour toutes les applications qui viennent dâĂȘtre créées. Elle ne sâaffiche que lorsque vous ĂȘtes en phase de dĂ©veloppement et que vous nâavez pas encore créé de page dâaccueil bien Ă vous. Tant que vous nâaurez pas configurĂ© de page correspondant aux souhaits dâAmĂ©lie, vous verrez cette page.

Sébastien, qui vous chaperonne, attire votre attention sur une autre chose intéressante qui apparaßt sur cette page. Regardez en bas.
Tu vois cette barre noire ? Câest la barre du Profiler de Symfony, la toolbar. Câest ton meilleur ami pour le debug ! Clique sur une des icĂŽnes quâil y a dessus, tu vas voir.Â
Ce profiler vous affiche tout un tas dâinformations au sujet de la page que vous ĂȘtes en train de visiter. Ă commencer par le petit code numĂ©rique sur une pastille rouge en bas Ă gauche : le code HTTP de la rĂ©ponse renvoyĂ©e par votre application.

Il est temps de faire un rapide retour sur ce que cela signifie. Ătant donnĂ© que rĂ©pondre Ă des requĂȘtes HTTP est le rĂŽle principal de notre future application, il est important de savoir de quoi on parle.
Le protocole HTTP fonctionne simplement par un échange de messages entre deux parties : le Client et le Serveur.

Dâun cĂŽtĂ©, le Client envoie un premier message, la RequĂȘte, et de lâautre le serveur renvoie une RĂ©ponse. Les deux ont la mĂȘme structure â une premiĂšre ligne descriptive, une sĂ©rie dâen-tĂȘtes sous forme de paires clĂ©-valeur, une ligne vide, puis un corps de message â mais un contenu diffĂ©rent.

Oh lĂ lĂ , mais attends, il faut que je connaisse tout ça pour utiliser Symfony?Â
Pas de panique, vous nâavez pas besoin de connaĂźtre par cĆur tous les en-tĂȘtes possibles ou ce genre de dĂ©tail. ConnaĂźtre le fonctionnement simplifiĂ© tel que nous venons de lâexpliquer ainsi que les quelques informations qui viennent suffira.
Tout dâabord, regardez la premiĂšre ligne de la requĂȘte. Dans lâordre, les trois Ă©lĂ©ments que nous avons sont : une mĂ©thode HTTP (ou verbe HTTP, âGETâ), une ressource (le chemin auquel on tente dâaccĂ©der, â/requestâ), et la version du protocole HTTP qui a Ă©tĂ© utilisĂ©e (ici âHTTP/2â). Les deux premiers Ă©lĂ©ments vont nous ĂȘtre utiles trĂšs rapidement dans les prochains chapitres.
PremiĂšrement, la mĂ©thode HTTP. Il y en a plusieurs possibles, chacune ayant une signification spĂ©cifique. Elles permettent au client dâindiquer au serveur le type dâaction quâil souhaite effectuer. Ici, âGETâ indique que la requĂȘte a pour but de rĂ©cupĂ©rer des informations. Ici encore, pas besoin de les connaĂźtre toutes, les suivantes suffiront :
Méthode | Signification |
GET | Récupérer les informations disponibles à cette adresse |
POST | Envoyer des données en laissant le serveur se charger de les traiter |
PUT | Remplacer toutes les donnĂ©es Ă lâadresse indiquĂ©e |
DELETE | Effacer toutes les donnĂ©es Ă lâadresse indiquĂ©e |
Pour ce qui est de la ressource, il sâagit dâune adresse relative Ă celle de votre site. Câest-Ă -dire que si quelquâun tape https://www.votresite.com/une-certaine-page dans son navigateur, la ressource sera/une-certaine-page .
La rĂ©ponse a la mĂȘme structure que la requĂȘte, mais le contenu est diffĂ©rent. Cette fois, nous avons la version du protocole HTTP utilisĂ©e en premier. Ensuite, viennent deux informations primordiales : un code de rĂ©ponse, suivi de sa version textuelle. Ce code nous offre une information instantanĂ©e sur lâĂ©tat de notre rĂ©ponse.
Et je suis censé connaßtre tous les codes ?
Pas du tout : il en existe un grand nombre. Vous connaĂźtrez la plupart au fil du temps, mais pour commencer, il suffit de connaĂźtre les principaux et de savoir quâils sont rĂ©partis en catĂ©gories :
Catégorie | Signification |
1xx | Informations, gĂ©nĂ©ralement pour des rĂ©ponses temporaires, ou suivies dâautres rĂ©ponses |
2xx | SuccĂšs, tout sâest bien passĂ© et la rĂ©ponse comporte lâinformation demandĂ©e |
3xx | Redirection, lorsque la ressource a changĂ© dâadresse |
4xx | Erreur dans la requĂȘte, lorsque le format est mauvais, ou que la ressource demandĂ©e nâexiste pas, par exemple |
5xx | Erreur serveur, si lâapplication a plantĂ©, par exemple |
Parmi les codes les plus frĂ©quents, on peut noter le  200 OK , le fameux  404 Not Found , ou encore lâerreur  500 Internal Server Error .
Outre ces codes, la réponse contient aussi un contenu, sa troisiÚme partie. C'est-à -dire que si vous avez demandé une page web, le code HTML de cette page se trouve dans ce corps de réponse.
Dâaccord, mais quel rapport avec Symfony ?
Tout ! Comme nous lâavons dit plus haut, Symfony est un framework HTTP. Son but est de vous permettre de recevoir des requĂȘtes et de renvoyer les rĂ©ponses adĂ©quates. Puisque Symfony doit traiter des requĂȘtes, elles doivent donc avoir une reprĂ©sentation dans Symfony : il sâagit de lâobjet  Request , tout simplement. Cet objet se trouve dans le composant  HttpFoundation , une des briques de base de Symfony. Lâobjet  Request est unique dans votre application. Il reprĂ©sente donc la requĂȘte qui a dĂ©clenchĂ© le lancement de lâapplication, et toutes les informations qui vont avec.Â
Vous y trouverez en particulier les méthodes et propriétés suivantes :
<?php
// les trois propriétés suivantes sont des objets qui contiennent tous une méthode all() qui renvoie tout leur contenu et une méthode get($key) pour récupérer une valeur
$request->query; // donnĂ©es envoyĂ©es dans lâURL, contenu de $_GET
$request->query->get(âparamâ); // renverra la valeur âfooâ passĂ©e dans le paramĂštre dâURL âparamâ, par exemple avec âwww.monsite.com/une-route?param=fooâ
$request->request; // données envoyées dans $_POST
$request->attributes; // données ajoutées par Symfony
$request->getMethod(); // renvoie la mĂ©thode HTTP de la requĂȘte
$request->getPathInfo(); // renvoie la ressource demandée
$request->getContent(); // renvoie le contenu brut de la requĂȘteNous avons reçu une requĂȘte, et nous avons dĂ©sormais un objet pour la reprĂ©senter dans notre application. Notre application va donc pouvoir traiter cette requĂȘte et renvoyer une rĂ©ponse. Voici schĂ©matiquement ce quâil va se passer :

Ăa en fait des Ă©tapes ! Mais câest quoi un Kernel ? Et un Routing ? Et un controller ?Â
Chaque chose en son temps ! Nous allons dĂ©tailler tout cela un minimum au fil des chapitres qui viennent, mais pour lâinstant voici dĂ©jĂ une premiĂšre explication :
Tout dâabord, le front controller est tout simplement le fichier qui sert de point dâentrĂ©e Ă notre application. Toutes les requĂȘtes qui arrivent transitent par lui, et câest lui qui est chargĂ© de dĂ©marrerâŠ
Le Kernel de Symfony, câest le centre de notre application. Câest lui qui sera chargĂ© de gĂ©rer la configuration de lâapplication, prendre en charge la requĂȘte, et rĂ©cupĂ©rer la rĂ©ponse adĂ©quate.
Vous ne coderez ou ne toucherez cependant pas Ă tout dans cette liste, lâessentiel de votre travail se cantonnera aux controllers.
Pour savoir comment rĂ©pondre de la bonne façon Ă une requĂȘte, il faut savoir quelle est la demande. Et cela sera fait grĂące au Routing. Voyez-le comme le policier qui fait la circulation. Nous allons permettre Ă notre application de gĂ©rer plusieurs routes possibles, et le routing fera lâaiguillage.
Les controllers sont la derniĂšre piĂšce du puzzle. Ce sont eux qui seront chargĂ©s de renvoyer une rĂ©ponse, le plus souvent sous la forme dâun objet de la classe Response.
Dans le protocole HTTP, un Client envoie une RequĂȘte Ă un Serveur, qui lui renvoie une RĂ©ponse.
Une requĂȘte se dĂ©finit entre autres par une mĂ©thode et une ressource.
Une réponse se définit entre autres par un code et un contenu.
Le but de Symfony est de nous aider Ă traiter des requĂȘtes et renvoyer ces rĂ©ponses.
Le Kernel de Symfony gĂšre la configuration de notre application et exĂ©cute le traitement de la requĂȘte.
Et maintenant, voyons dans le prochain chapitre comment les routes et les controllers vont nous permettre de rĂ©pondre aux requĂȘtes entrantes !