/** * Redirects the browser to the specified URL. * * This method adds a "Location" header to the current response. Note that it does not send out * the header until {@see \rock\response\Response::send()} is called. In a controller action you may use this method as follows: * * ```php * return Rock::$app->response->redirect($url); * ``` * * In other places, if you want to send out the "Location" header immediately, you should use * the following code: * * ```php * Rock::$app->response->redirect($url)->send(); * return; * ``` * * In AJAX mode, this normally will not work as expected unless there are some * client-side JavaScript code handling the redirection. To help achieve this goal, * this method will send out a "X-Redirect" header instead of "Location". * * If you use the "rock" JavaScript module, it will handle the AJAX redirection as * described above. Otherwise, you should write the following JavaScript code to * handle the redirection: * * ```js * $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest' * ``` * * @param string $url the URL to be redirected to. This can be in one of the following formats: * * - a string representing a URL (e.g. "http://example.com") * - a string representing a URL alias (e.g. "@example.com") * * Any relative URL will be converted into an absolute one by prepending it with the host info * of the current request. * * @param integer $statusCode the HTTP status code. Defaults to 302. * See @link http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html * for details about HTTP status code * @param boolean $checkAjax whether to specially handle AJAX (and PJAX) requests. Defaults to true, * meaning if the current request is an AJAX or PJAX request, then calling this method will cause the browser * to redirect to the given URL. If this is false, a `Location` header will be sent, which when received as * an AJAX/PJAX response, may NOT cause browser redirection. * @return static the response object itself */ public function redirect($url, $statusCode = 302, $checkAjax = true) { if (strpos($url, '/') === 0 && strpos($url, '//') !== 0) { $url = $this->request->getHostInfo() . $url; } if ($checkAjax) { if ($this->request->isPjax()) { $this->getHeaders()->set('X-Pjax-Url', $url); } elseif ($this->request->isAjax()) { $this->getHeaders()->set('X-Redirect', $url); } else { $this->getHeaders()->set('Location', $url); } } else { $this->getHeaders()->set('Location', $url); } $this->setStatusCode($statusCode); return $this; }
/** * Run mode debug. * * @param Response $response * @return Run */ protected static function debuger(Response $response = null) { $run = new Run(); if (isset($response)) { switch ($response->format) { case Response::FORMAT_JSON: $handler = new JsonResponseHandler(); break; case Response::FORMAT_XML: $handler = new XmlResponseHandler(); break; default: $request = new Request(); if ($request->isAjax() || $request->isCORS()) { $handler = new JsonResponseHandler(); } else { $handler = new PrettyPageHandler(); } } $run->setSendHttpCode(500); $response->setStatusCode(500); $response->send(); } else { $handler = new PrettyPageHandler(); } $run->pushHandler($handler); //$run->register(); return $run; }