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.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow