Recherche…
Introduction
Un contrôleur dans Symfony est un appel PHP (une fonction, une méthode sur un objet ou une fermeture) qui reçoit une requête HTTP et renvoie une réponse HTTP. Une réponse HTTP peut contenir n'importe quoi: une page HTML, une chaîne JSON, un téléchargement de fichier, etc.
Pour indiquer à Symfony quel contrôleur doit gérer une requête donnée, vous devez configurer une route .
Syntaxe
- $ this-> generateUrl ('route_name', ['placeholder' => 'value']); // génère une URL pour la route
route_name
route avec un espace réservé - $ this-> render ('template.html.twig'); // affiche un modèle Twig et renvoie un objet Response
- $ this-> render ('template.html.twig', ['paramètre' => $ value]); // rend un modèle Twig avec un paramètre
- lancer $ this-> createNotFoundException ('Message'); // lance une exception NotFoundHttpException qui fera que Symfony renvoie une réponse 404
Remarques
Les contrôleurs doivent être petits et se concentrer sur le traitement des requêtes HTTP: la logique métier de votre application doit être déléguée à différentes parties de votre application, par exemple votre modèle de domaine.
Une classe de contrôleur simple
// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
class HelloWorldController
{
public function helloWorldAction()
{
return new Response(
'<html><body>Hello World!</body></html>'
);
}
}
Rendu d'un modèle Twig
La plupart du temps, vous souhaiterez rendre les réponses HTML à partir d'un modèle au lieu de coder en dur le code HTML de votre contrôleur. En outre, vos modèles ne seront pas statiques mais contiendront des espaces réservés pour les données d'application. Par défaut, Symfony est fourni avec Twig, un puissant langage de modélisation.
Pour utiliser Twig dans votre contrôleur, étendez la classe de base du Controller
Symfony:
// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class HelloWorldController extends Controller
{
public function helloWorldAction()
{
$text = 'Hello World!';
return $this->render('hello-world.html.twig', ['text' => $text]);
}
}
Créez le modèle Twig (situé dans app/Resources/views/hello-world.html.twig
):
<html><body>{{ text }}</body></html>
Twig remplacera automatiquement le paramètre {{ text }}
par la valeur du paramètre text
transmis par le contrôleur. Cela rendra la sortie HTML suivante:
<html><body>Hello World!</body></html>
Retourner une page 404 (non trouvée)
Parfois, vous souhaitez renvoyer une réponse 404 (non trouvée), car la ressource demandée n'existe pas. Symfony vous permet de le faire en lançant une NotFoundHttpException
.
Le contrôleur de base Symfony expose une méthode createNotFoundException
qui crée l'exception pour vous:
public function indexAction()
{
// retrieve the object from database
$product = ...;
if (!$product) {
throw $this->createNotFoundException('The product does not exist');
}
// continue with the normal flow if no exception is thrown
return $this->render(...);
}
Utilisation des données de l'objet Request
Si vous devez accéder à l'objet Request
(par exemple, pour lire les paramètres de la requête, lire un en-tête HTTP ou traiter un fichier téléchargé), vous pouvez recevoir la requête en tant qu'argument de méthode en ajoutant un argument de type:
use Symfony\Component\HttpFoundation\Request;
public function indexAction(Request $request)
{
$queryParam = $request->query->get('param');
// ...
}
Symfony reconnaît l'indicateur de type et ajoute l'argument de requête à l'appel du contrôleur.