DefaultPolicy::getViewFor PHP Метод

getViewFor() публичный Метод

public getViewFor ( Response &$response )
$response Response
    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());
        }
    }