Ver índice de contenidos del libro

2.7. Manejadores de vistas

Los manejadores de las vistas o "view handlers" te permiten interceptar la respuesta de un controlador, siempre que no sea de tipo Response, para modificarla antes de devolverla al kernel.

Para registrar un "view handler", pasa cualquier código válido de PHP al método view(). Este código debe aceptar cualquier tipo de respuesta devuelta por un controllador:

$app->view(function (array $controllerResult) use ($app) {
    return $app->json($controllerResult);
});

El segundo argumento de los "view handlers" es un objeto de tipo Request, lo que permite por ejemplo devolver diferentes respuestas en función del formato de la petición:

$app->view(function (array $controllerResult, Request $request) use ($app) {
    $acceptHeader = $request->headers->get('Accept');
    $bestFormat = $app['negotiator']->getBestFormat($acceptHeader, array('json', 'xml'));
 
    if ('json' === $bestFormat) {
        return new JsonResponse($controllerResult);
    }
 
    if ('xml' === $bestFormat) {
        return $app['serializer.xml']->renderResponse($controllerResult);
    }
 
    return $controllerResult;
});

Como es habitual, el orden de los "view handlers" importa, ya que se ejecutan en el mismo orden en el que se registran. Además, el valor que se pasa a cada "view handler" es el resultado devuelto por el anterior "view handler".

Nota Asegúrate de que Silex recibe un objeto de tipo Response o una cadena de texto como resultado de la ejecución del último "view handler".