Symfony - Controladores

El controlador es responsable de manejar cada solicitud que llega a la aplicación Symfony. El controlador lee una información de la solicitud. Luego, crea y devuelve un objeto de respuesta al cliente.

Según Symfony, DefaultController la clase está ubicada en “src/AppBundle/Controller”. Se define como sigue.

DefaultController.php

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

class DefaultController extends Controller {  
}

Aquí el HttpFoundation El componente define una capa orientada a objetos para la especificación HTTP, y el FrameworkBundle contiene la mayor parte de la funcionalidad del marco "base".

Solicitar objeto

La clase Request es una representación orientada a objetos del mensaje de solicitud HTTP.

Crear un objeto de solicitud

La solicitud se puede crear usando createFromGlobals() método.

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

Puede simular una solicitud utilizando Globals. En lugar de crear una solicitud basada en los globales de PHP, también puede simular una solicitud.

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

Aquí el create() El método crea una solicitud basada en un URI, un método y algunos parámetros.

Anular un objeto de solicitud

Puede anular las variables globales de PHP utilizando el overrideGlobals()método. Se define como sigue.

$request->overrideGlobals();

Acceder a un objeto de solicitud

Se puede acceder a la solicitud de una página web en un controlador (método de acción) usando getRequest() método del controlador base.

$request = $this->getRequest();

Identificación de un objeto de solicitud

Si desea identificar una solicitud en su aplicación, “PathInfo"El método devolverá la identidad única de la URL de solicitud. Se define como sigue.

$request->getPathInfo();

Objeto de respuesta

El único requisito para un controlador es devolver un objeto de respuesta. Un objeto de respuesta contiene toda la información de una solicitud determinada y la envía de vuelta al cliente.

A continuación se muestra un ejemplo sencillo.

Ejemplo

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

Puede definir el objeto Respuesta en JSON de la siguiente manera.

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

Constructor de respuestas

El constructor contiene tres argumentos:

  • El contenido de la respuesta
  • El código de estado
  • Una matriz de encabezados HTTP

A continuación se muestra la sintaxis básica.

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

Por ejemplo, puede pasar el argumento de contenido como,

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

Del mismo modo, también puede pasar otros argumentos.

Enviando respuesta

Puede enviar una respuesta al cliente utilizando el send()método. Se define como sigue.

$response->send();

Para redirigir al cliente a otra URL, puede utilizar el RedirectResponse clase.

Se define como sigue.

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

FrontController

Un solo archivo PHP que maneja todas las solicitudes que ingresan a su aplicación. FrontController ejecuta el enrutamiento de diferentes URL a partes internas de la aplicación.

A continuación se muestra la sintaxis básica 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();

Aquí el in_array() La función busca en una matriz un valor específico.