Symfony - Contrôleurs

Le contrôleur est responsable du traitement de chaque demande qui entre dans l'application Symfony. Le contrôleur lit une information de la demande. Ensuite, crée et renvoie un objet de réponse au client.

Selon Symfony, DefaultController la classe est située à “src/AppBundle/Controller”. Il est défini comme suit.

DefaultController.php

<?php 
namespace AppBundle\Controller; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Response;  

class DefaultController extends Controller {  
}

Ici le HttpFoundation le composant définit une couche orientée objet pour la spécification HTTP, et le FrameworkBundle contient la plupart des fonctionnalités du framework «de base».

Objet de la demande

La classe Request est une représentation orientée objet du message de requête HTTP.

Création d'un objet de requête

La demande peut être créée en utilisant createFromGlobals() méthode.

use Symfony\Component\HttpFoundation\Request; 
$request = Request::createFromGlobals();

Vous pouvez simuler une demande à l'aide de Globals. Au lieu de créer une requête basée sur les globaux PHP, vous pouvez également simuler une requête.

$request = Request::create( 
   '/student', 
   'GET', 
   array('name' => 'student1') 
);

Ici le create() crée une requête basée sur un URI, une méthode et certains paramètres.

Remplacer un objet de requête

Vous pouvez remplacer les variables globales PHP en utilisant le overrideGlobals()méthode. Il est défini comme suit.

$request->overrideGlobals();

Accéder à un objet de requête

La demande d'une page Web est accessible dans un contrôleur (méthode d'action) en utilisant getRequest() méthode du contrôleur de base.

$request = $this->getRequest();

Identification d'un objet de requête

Si vous souhaitez identifier une demande dans votre application, “PathInfo"La méthode retournera l'identité unique de l'url de la requête. Il est défini comme suit.

$request->getPathInfo();

Objet de réponse

La seule exigence pour un contrôleur est de renvoyer un objet Response. Un objet Response contient toutes les informations d'une demande donnée et les renvoie au client.

Voici un exemple simple.

Exemple

use Symfony\Component\HttpFoundation\Response; 
$response = new Response(‘Default'.$name, 10);

Vous pouvez définir l'objet Response dans JSON comme suit.

$response = new Response(json_encode(array('name' => $name))); 
$response->headers->set('Content-Type', 'application/json');

Constructeur de réponse

Le constructeur contient trois arguments -

  • Le contenu de la réponse
  • Le code d'état
  • Un tableau d'en-têtes HTTP

Voici la syntaxe de base.

use Symfony\Component\HttpFoundation\Response;  
$response = new Response( 
   'Content', 
   Response::HTTP_OK, 
   array('content-type' => 'text/html') 
);

Par exemple, vous pouvez transmettre l'argument content comme suit:

$response->setContent(’Student details’);

De même, vous pouvez également transmettre d'autres arguments.

Envoi de la réponse

Vous pouvez envoyer une réponse au client en utilisant le send()méthode. Il est défini comme suit.

$response->send();

Pour rediriger le client vers une autre URL, vous pouvez utiliser le RedirectResponse classe.

Il est défini comme suit.

use Symfony\Component\HttpFoundation\RedirectResponse;  
$response = new RedirectResponse('http://tutorialspoint.com/');

FrontController

Un fichier PHP unique qui gère chaque requête entrant dans votre application. FrontController exécute le routage de différentes URL vers différentes parties internes de l'application.

Voici la syntaxe de base de FrontController.

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response;  

$request = Request::createFromGlobals();  
$path = $request->getPathInfo(); // the URI path being requested 

if (in_array($path, array('', '/')))  { 
   $response = new Response(’Student home page.'); 
} elseif (‘/about’ === $path) { 
   $response = new Response(’Student details page’); 
} else { 
   $response = new Response('Page not found.', Response::HTTP_NOT_FOUND); 
} 
$response->send();

Ici le in_array() La fonction recherche dans un tableau une valeur spécifique.