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

  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 HTTP status code (302 "Found" 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.      * Returns the target URL.
  44.      */
  45.     public function getTargetUrl(): string
  46.     {
  47.         return $this->targetUrl;
  48.     }
  49.     /**
  50.      * Sets the redirect target of this response.
  51.      *
  52.      * @return $this
  53.      *
  54.      * @throws \InvalidArgumentException
  55.      */
  56.     public function setTargetUrl(string $url): static
  57.     {
  58.         if ('' === $url) {
  59.             throw new \InvalidArgumentException('Cannot redirect to an empty URL.');
  60.         }
  61.         $this->targetUrl $url;
  62.         $this->setContent(
  63.             sprintf('<!DOCTYPE html>
  64. <html>
  65.     <head>
  66.         <meta charset="UTF-8" />
  67.         <meta http-equiv="refresh" content="0;url=\'%1$s\'" />
  68.         <title>Redirecting to %1$s</title>
  69.     </head>
  70.     <body>
  71.         Redirecting to <a href="%1$s">%1$s</a>.
  72.     </body>
  73. </html>'htmlspecialchars($url\ENT_QUOTES'UTF-8')));
  74.         $this->headers->set('Location'$url);
  75.         return $this;
  76.     }
  77. }