Comprenez le protocole HTTP dans Symfony

Découvrez votre application

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.lock

Vous 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.

Page d'accueil de Symfony
Page d'accueil de Symfony

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.

Affichage du profiler
Affichage du profiler

Revenez sur le protocole HTTP

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.

Description du protocole HTTP
Description du protocole HTTP

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.

Structures d'une request et d'une response
Structures d'une request et d'une response

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.

La requĂȘte

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

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.

Comprenez la requĂȘte dans Symfony

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ĂȘte

Suivez la requĂȘte dans Symfony

Nous 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 :

Traitement d'une request dans Symfony
Traitement d'une request dans Symfony

Ç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.

En résumé

  • 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 !

Et si vous obteniez un diplĂŽme OpenClassrooms ?
  • Formations jusqu’à 100 % financĂ©es
  • Date de dĂ©but flexible
  • Projets professionnalisants
  • Mentorat individuel
Trouvez la formation et le financement faits pour vous