/** * Handle HMVC request * @param Request $request * @param array $options * @param bool $subrequest * @return Response\Json|Response\Layout|Response\PageNotFound|Response\Redirect|string * @throws Exception */ 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; }
/** * Get current HTML layout name * * @return string HTML layout, e.g., "main.php". */ function ipGetLayout() { $response = \Ip\ServiceLocator::response(); if (method_exists($response, 'getLayout')) { return $response->getLayout(); } else { ipLog()->error('Response.cantGetLayout: Response method has no method getLayout', array('response' => $response)); } return null; }