Example #1
0
 /**
  * This is a listener for KernelEvents::VIEW which will render a view or send JSON depending on the Accept header
  *
  * @param GetResponseForControllerResultEvent $event
  *
  * @throws SCTException
  * @throws \Exception
  */
 public function render(GetResponseForControllerResultEvent $event)
 {
     /** @var Response|array $result */
     $result = $event->getControllerResult();
     //if we have a response then just set that and return
     if ($result instanceof Response) {
         $event->setResponse($result);
         return;
     }
     //otherwise lets render a response
     $request = $event->getRequest();
     $response = new Response();
     $acceptableContentType = $request->getAcceptableContentTypes();
     if (in_array('text/html', $acceptableContentType)) {
         $template = $this->controller->getTemplate();
         //if we don't have a template throw exception
         if (!$template) {
             throw new SCTException("Browser requested html but controller didn't specify a template.");
         }
         $defaultData = $this->controller->getDefaultData();
         if (is_array($result)) {
             $defaultData = array_merge($defaultData, $result);
         }
         $response = $this->renderHTML($template, $defaultData);
     } else {
         if (in_array('application/json', $acceptableContentType)) {
             $response = new JsonResponse($result);
         }
     }
     $event->setResponse($response);
 }