/**
* Visit struct returned by controllers.
*
* @param mixed $data
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function visit($data)
{
$this->generator->reset();
$this->generator->startDocument($data);
$this->visitValueObject($data);
//@todo Needs refactoring!
// A hackish solution to enable outer visitors to disable setting
// of certain headers in inner visitors, for example Accept-Patch header
// which is valid in GET/POST/PATCH for a resource, but must not appear
// in the list of resources
foreach ($this->response->headers->all() as $headerName => $headerValue) {
if ($headerValue[0] === false) {
$this->response->headers->remove($headerName);
}
}
$response = clone $this->response;
$response->setContent($this->generator->isEmpty() ? null : $this->generator->endDocument($data));
// reset the inner response
$this->response = new Response(null, 200);
$this->statusCode = null;
return $response;
}