vendor/symfony/http-foundation/RedirectResponse.php line 19

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\HttpFoundation;
  11. /**
  12.  * RedirectResponse represents an HTTP response doing a redirect.
  13.  *
  14.  * @author Fabien Potencier <fabien@symfony.com>
  15.  */
  16. class RedirectResponse extends Response
  17. {
  18.     protected $targetUrl;
  19.     /**
  20.      * Creates a redirect response so that it conforms to the rules defined for a redirect status code.
  21.      *
  22.      * @param string $url     The URL to redirect to. The URL should be a full URL, with schema etc.,
  23.      *                        but practically every browser redirects on paths only as well
  24.      * @param int    $status  The status code (302 by default)
  25.      * @param array  $headers The headers (Location is always set to the given URL)
  26.      *
  27.      * @throws \InvalidArgumentException
  28.      *
  29.      * @see https://tools.ietf.org/html/rfc2616#section-10.3
  30.      */
  31.     public function __construct(?string $urlint $status 302, array $headers = [])
  32.     {
  33.         parent::__construct(''$status$headers);
  34.         $this->setTargetUrl($url);
  35.         if (!$this->isRedirect()) {
  36.             throw new \InvalidArgumentException(sprintf('The HTTP status code is not a redirect ("%s" given).'$status));
  37.         }
  38.         if (301 == $status && !\array_key_exists('cache-control'array_change_key_case($headers, \CASE_LOWER))) {
  39.             $this->headers->remove('cache-control');
  40.         }
  41.     }
  42.     /**
  43.      * Factory method for chainability.
  44.      *
  45.      * @param string $url     The url to redirect to
  46.      * @param int    $status  The response status code
  47.      * @param array  $headers An array of response headers
  48.      *
  49.      * @return static
  50.      */
  51.     public static function create($url ''$status 302$headers = [])
  52.     {
  53.         return new static($url$status$headers);
  54.     }
  55.     /**
  56.      * Returns the target URL.
  57.      *
  58.      * @return string target URL
  59.      */
  60.     public function getTargetUrl()
  61.     {
  62.         return $this->targetUrl;
  63.     }
  64.     /**
  65.      * Sets the redirect target of this response.
  66.      *
  67.      * @param string $url The URL to redirect to
  68.      *
  69.      * @return $this
  70.      *
  71.      * @throws \InvalidArgumentException
  72.      */
  73.     public function setTargetUrl($url)
  74.     {
  75.         if (empty($url)) {
  76.             throw new \InvalidArgumentException('Cannot redirect to an empty URL.');
  77.         }
  78.         $this->targetUrl $url;
  79.         $this->setContent(
  80.             sprintf('<!DOCTYPE html>
  81. <html>
  82.     <head>
  83.         <meta charset="UTF-8" />
  84.         <meta http-equiv="refresh" content="0;url=\'%1$s\'" />
  85.         <title>Redirecting to %1$s</title>
  86.     </head>
  87.     <body>
  88.         Redirecting to <a href="%1$s">%1$s</a>.
  89.     </body>
  90. </html>'htmlspecialchars($urlENT_QUOTES'UTF-8')));
  91.         $this->headers->set('Location'$url);
  92.         return $this;
  93.     }
  94. }