/** * This method process the action response. * * @param mixed $result * @param string $controllerName * @param string $actionName * @throws Exception */ protected function handleActionResult($result, $controllerName, $actionName, Customweb_Core_Http_IRequest $request) { if ($result === null) { throw new Exception(Customweb_Core_String::_("Action '@action' on controller '@controller' does not return any result.")->format(array('@controller' => $controllerName, '@action' => $actionName))); } if (is_array($result)) { if (isset($result['controller'])) { $controllerName = $result['controller']; } if (!isset($result['action'])) { throw new Exception("If you provide a array as response of a action, you have to provde a 'action' key, which indicates the action to which the request is forwarded to."); } $actionName = $result['action']; return $this->invokeControllerAction($request, $controllerName, $actionName); } else { if (is_string($result) && strpos($result, 'redirect:') === 0) { $result = $result; $url = substr($result, strlen('redirect:')); $response = new Customweb_Core_Http_Response(); $response->appendHeader('Location: ' . $url); return $response; } else { if (is_string($result)) { $response = new Customweb_Core_Http_Response(); $response->setBody($result); return $response; } else { if ($result instanceof Customweb_Core_Http_IResponse) { return $result; } else { throw new Exception(Customweb_Core_String::_("Action '@action' on controller '@controller' does not return a valid result.")->format(array('@controller' => $controllerName, '@action' => $actionName))); } } } } }
/** * This method creates a redirect which uses the HTML head for redirection. Most * HTTP client implementation will not follow this redirection. * * @param string $url * @return Customweb_Core_Http_Response */ public static function htmRedirect($url) { $body = '<html> <head> <meta http-equiv="refresh" content="0; url=' . $url . '" /> </head> <body>You will be redirected.</body> </html>'; $response = new Customweb_Core_Http_Response(); $response->setBody($body); return $response; }