public function handleRequest(Request $request, $options = array(), $subrequest = true)
{
\Ip\ServiceLocator::addRequest($request);
$rawResponse = $this->_handleOnlyRequest($request, $options, $subrequest);
if (!empty($options['returnRawResponse'])) {
if ($subrequest) {
\Ip\ServiceLocator::removeRequest();
}
return $rawResponse;
}
if (empty($rawResponse) || is_string($rawResponse) || $rawResponse instanceof \Ip\View) {
if ($rawResponse instanceof \Ip\View) {
$rawResponse = $rawResponse->render();
}
if (empty($rawResponse)) {
$rawResponse = '';
}
$response = \Ip\ServiceLocator::response();
$response->setContent($rawResponse);
} elseif ($rawResponse instanceof \Ip\Response) {
\Ip\ServiceLocator::setResponse($rawResponse);
if ($subrequest) {
\Ip\ServiceLocator::removeRequest();
}
return $rawResponse;
} elseif ($rawResponse === null) {
$response = \Ip\ServiceLocator::response();
} else {
\Ip\ServiceLocator::removeRequest();
throw new \Ip\Exception('Unknown response');
}
if ($subrequest) {
\Ip\ServiceLocator::removeRequest();
}
return $response;
}