public function getViewFor(Response &$response)
{
// TODO: When version 0.3 is released, remove this conditional
// and break backwards compatibility with versions <= 0.12
if (!isset($response->meta->respondWith) || empty($response->meta->respondWith)) {
$view = new $response->meta->viewClass();
$response->meta->respondWith = array($view);
if ($view != 'LayoutsView') {
$response->meta->respondWith[] = $view;
}
$response->meta->respondWith[] = 'JsonView';
}
if ($response instanceof ForwardingResponse) {
return new NativeView();
}
// Here we select a view that can respond in the desired format
$viewClasses = $response->meta->respondWith;
$views = array();
foreach ($viewClasses as $viewClass) {
$views[] = new $viewClass();
}
$accepts = $response->request->accepts;
$accepts->resetFormats();
do {
$format = $accepts->nextFormat();
foreach ($views as $view) {
if ($view->canRespondWith($response)) {
return $view;
}
}
} while ($format !== false);
if (isset($response->meta->viewName)) {
if (isset($response->meta->viewsPrefix)) {
$view = $response->meta->viewsPrefix . $response->meta->viewName;
} else {
$view = $response->meta->viewName;
}
throw new RecessResponseException('Unable to provide desired content-type. Does the view "' . $view . '" exist?', ResponseCodes::HTTP_NOT_ACCEPTABLE, get_defined_vars());
} else {
throw new RecessResponseException('Unable to provide desired content-type. Does your view exist?', ResponseCodes::HTTP_NOT_ACCEPTABLE, get_defined_vars());
}
}