
RequĂȘtes HTTP
Parcours dâune requĂȘte HTTP sous Symfony
- Le client via le navigateur tape une URL et arrive sur notre application.
- Il arrive sur index.php (dans public), qui retourne juste une instance de la classe kernel.php.
- Selon la route choisie, le kernel dirige vers le contrÎleur concerné, qui appelle le Twig associé qui, lui, retourne la page HTML.
- Pour afficher le Twig, le contrĂŽleur requĂȘte une base de donnĂ©es via lâentitĂ© concernĂ©e.
Quand quelquâun arrive sur le site, une instance de Request est créée. La requĂȘte au serveur se fait donc par une URL et est gĂ©rĂ©e par le fichier .htaccess, qui redirige forcĂ©ment sur index.php et bloque lâaccĂšs aux autres dossiers.
Le systÚme de routage se fait avec une URL qui correspond à une méthode. Chaque URL est appelée une route et porte un nom unique.
Les contrÎleurs contiennent les fonctions appelées par le systÚme de routage. Un contrÎleur peut contenir plusieurs fonctions et donc correspondre à plusieurs routes.
Ils héritent de AbstractController, qui connait toutes les méthodes servant à retourner des réponses HTTP, grùce au paquet ...\HttpFoundation\Response.
Le moteur de templates remplace le PHP et gĂ©nĂšre du HTML, ce qui simplifie la lecture et lâĂ©criture. Il correspond Ă la Vue du modĂšle MVC.
Conventions :
- dans le dossier templates/ - une extension .html.twig
- un fichier twig par méthode de contrÎleur
- le mĂȘme nom que la mĂ©thode associĂ©e (ça va bloquer sinon)
- dans un sous-dossier qui porte le mĂȘme nom que le contrĂŽleur
- sans majuscules (snake_case pour les noms de méthodes)
Pour dĂ©clencher lâaffichage du fichier twig, on met un return dans la mĂ©thode du contrĂŽleur qui conduit vers le twig : $this->render("main/home.html.twig");.
Premiers contrĂŽleur et Twig
Dans le terminal de lâIDE (ici, PhpStorm) :
- on installe le paquet requis :
composer require symfony/maker-bundle --dev
- on crée le contrÎleur :
symfony console make:controller- choix du nom (on peut aussi écrire le nom directement dans la commande) :
Home
âčïžIl renomme automatiquement tous les contrĂŽleurs en ajoutant Controller Ă la fin :HomeController. - choix du nom (on peut aussi Ă©crire le nom directement dans la commande) :
- Le contrÎleur est créé et mis au bon endroit : src/Controller/HomeController.php
Tout est pré-défini et généré.
Câest une classe PHP qui hĂ©rite bien de AbstratController, avec une mĂ©thode index() Ă modifier Ă façon.
BP : Le nom de la route est par convention ânomducontroleur_nomdelamethodeâ. Il y a beaucoup de routes, il faut sâappliquer.
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
class HomeController extends AbstractController
{
#[Route('/', name: 'home_index')]
public function index(): Response
{
return $this->json([
'message' => 'Welcome to your new controller!',
'path' => 'src/Controller/HomeController.php',
]);
}Le # peut ĂȘtre appelĂ© mĂ©tadata ou attribut : le Kernel lit cette ligne pour connaĂźtre le nom unique et lâurl liĂ©s Ă cette mĂ©thode.
class HomeController extends AbstractController
{
/**
* @Route('/', name= 'home_index')
*/
public function index(): Response
{
return $this->json([
'message' => 'Welcome to your new controller!',
'path' => 'src/Controller/HomeController.php',
]);
}
Lorsquâon lance le serveur symfony server:start et quâon Ă©crit lâurl voulue du contrĂŽleur, le rĂ©sultat de la fonction sâaffiche.
Néanmoins, on ne veut pas du JSON mais du HTML : on télécharge le moteur de templates Twig : composer require twig.
On modifie le contrĂŽleur pour quâil retourne un Twig :
- le type retourné par la fonction est
Response
- on importe le bon module :
use Symfony\Component\HttpFoundation\Response;
- on utilise la fonction
render(), qui retourne un fichier .html.twig
class HomeController extends AbstractController
{
#[Route('/', name: 'home_index')]
public function index(): Response
{
return $this->render('home/index.html.twig');
}
}
Le fichier Twig nâexiste, lâIDE propose de le crĂ©er.
Il est maintenant disponible dans templates/home/index.html.twg.
On peut y ajouter du html et lorsquâon va sur lâurl, la page HTML sâaffiche.
<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Hello Symfony</title>
</head>
<body>
<h1>Un premier Twig</h1>
<p>C'est ma page d'accueil.</p>
</body>
</html>
composer install que Symfony installe directement tous les paquets présents dans le fichier.
Parcours dâune requĂȘte HTTP