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".