Buscar..
Introducción
Un controlador en Symfony es un PHP ejecutable (una función, un método en un objeto o un cierre) que recibe una solicitud HTTP y devuelve una respuesta HTTP. Una respuesta HTTP puede contener cualquier cosa: una página HTML, una cadena JSON, una descarga de archivos, etc.
Para decirle a Symfony qué controlador debe manejar una determinada solicitud, necesitas configurar una ruta .
Sintaxis
- $ this-> generateUrl ('route_name', ['placeholder' => 'value']); // genera una URL para la ruta
route_name
con un marcador de posición - $ this-> render ('template.html.twig'); // representa una plantilla de Twig y devuelve un objeto de respuesta
- $ this-> render ('template.html.twig', ['parámetro' => $ valor]); // representa una plantilla de Twig con un parámetro
- lanzar $ this-> createNotFoundException ('Mensaje'); // lanza una NotFoundHttpException que hará que Symfony devuelva una respuesta 404
Observaciones
Los controladores deben ser pequeños y centrarse en el manejo de las solicitudes HTTP: la lógica de negocios real de su aplicación debe delegarse en diferentes partes de su aplicación, por ejemplo, su modelo de dominio.
Una clase de controlador 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>'
);
}
}
Renderizando una plantilla de ramita
La mayoría de las veces, deseará representar las respuestas HTML de una plantilla en lugar de codificar el código HTML en su controlador. Además, sus plantillas no serán estáticas, sino que contendrán marcadores de posición para los datos de la aplicación. Por defecto, Symfony viene con Twig, un poderoso lenguaje de creación de plantillas.
Para usar Twig en tu controlador, extiende la clase de Controller
base de 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]);
}
}
Cree la plantilla Twig (ubicada en app/Resources/views/hello-world.html.twig
):
<html><body>{{ text }}</body></html>
Twig reemplazará automáticamente el marcador de posición {{ text }}
con el valor del parámetro de text
, pasado por el controlador. Esto representará la siguiente salida HTML:
<html><body>Hello World!</body></html>
Devolviendo una página 404 (No encontrada)
A veces desea devolver una respuesta 404 (No encontrado) porque el recurso solicitado no existe. Symfony te permite hacerlo lanzando una NotFoundHttpException
.
El controlador básico de Symfony expone un método createNotFoundException
que crea la excepción para ti:
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(...);
}
Usando datos del objeto Request
Si necesita acceder al objeto de Request
(por ejemplo, para leer los parámetros de consulta, leer un encabezado HTTP o procesar un archivo cargado), puede recibir la solicitud como un argumento de método agregando un argumento de tipo insinuado:
use Symfony\Component\HttpFoundation\Request;
public function indexAction(Request $request)
{
$queryParam = $request->query->get('param');
// ...
}
Symfony reconocerá la sugerencia de tipo y agregará el argumento de solicitud a la llamada del controlador.