示例#1
0
文件: Response.php 项目: romeoz/rock
 /**
  * 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;
 }
示例#2
0
 /**
  * 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;
 }