Ver índice de contenidos del libro

1.3. Peticiones y respuestas en Symfony

Symfony ofrece una alternativa al enfoque de PHP a través de dos clases que te permiten interactuar con la petición HTTP y la respuesta de una manera más fácil.

La clase Request representa la petición HTTP siguiendo la filosofía de orientación a objetos. Con ella, tienes toda la información a tu alcance:

use Symfony\Component\HttpFoundation\Request;
 
$request = Request::createFromGlobals();
 
// la URI solicitada (p.e. /contacto) menos algunos parámetros de la consulta
$request->getPathInfo();
 
// recupera las variables GET y POST respectivamente
$request->query->get('foo');
$request->request->get('bar', 'valor utilizado si "bar" no existe');
 
// recupera las variables de SERVER
$request->server->get('HTTP_HOST');
 
// recupera una instancia del archivo subido identificado por 'foo'
$request->files->get('foo');
 
// recupera un valor de una COOKIE
$request->cookies->get('PHPSESSID');
 
// recupera una cabecera HTTP de la petición, normalizada, con índices en minúscula
$request->headers->get('host');
$request->headers->get('content_type');
 
$request->getMethod();      // GET, POST, PUT, DELETE, HEAD
$request->getLanguages();   // un array de idiomas aceptados por el cliente

Una ventaja añadida es que la clase Request hace un montón de trabajo adicional del que no tienes que preocuparte. Por ejemplo, el método isSecure() internamente comprueba tres valores PHP diferentes que pueden indicar si el usuario está conectado a través de una conexión segura (es decir, https).

Symfony también proporciona una clase Response, que simplifica la representación de la respuesta HTTP en PHP. Esto permite que tu aplicación utilice una interfaz orientada a objetos para construir la respuesta que será devuelta al cliente::

use Symfony\Component\HttpFoundation\Response;
 
$response = new Response();
 
$response->setContent('<html><body><h1>Hello world!</h1></body></html>');
$response->setStatusCode(200);
$response->headers->set('Content-Type', 'text/html');
 
// imprime las cabeceras HTTP seguidas por el contenido
$response->send();

Si Symfony no ofreciera nada más, ya tendrías un conjunto de herramientas para acceder fácilmente a la información de la petición y una interfaz orientada a objetos para crear la respuesta. De hecho, a medida que aprendas muchas de las características avanzadas de Symfony, nunca debes olvidar que el objetivo de tu aplicación es interpretar una petición y crear la respuesta adecuada basada en la lógica de tu aplicación.

Truco Las clases Request y Response forman parte de un componente independiente incluido en Symfony llamado HttpFoundation. Este componente se puede utilizar en aplicaciones independientes de Symfony y también proporciona clases para manejar sesiones y subir archivos.