vendor/symfony/http-foundation/StreamedResponse.php line 124

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.  * StreamedResponse represents a streamed HTTP response.
  13.  *
  14.  * A StreamedResponse uses a callback for its content.
  15.  *
  16.  * The callback should use the standard PHP functions like echo
  17.  * to stream the response back to the client. The flush() function
  18.  * can also be used if needed.
  19.  *
  20.  * @see flush()
  21.  *
  22.  * @author Fabien Potencier <fabien@symfony.com>
  23.  */
  24. class StreamedResponse extends Response
  25. {
  26.     protected $callback;
  27.     protected $streamed;
  28.     private $headersSent;
  29.     public function __construct(callable $callback nullint $status 200, array $headers = [])
  30.     {
  31.         parent::__construct(null$status$headers);
  32.         if (null !== $callback) {
  33.             $this->setCallback($callback);
  34.         }
  35.         $this->streamed false;
  36.         $this->headersSent false;
  37.     }
  38.     /**
  39.      * Factory method for chainability.
  40.      *
  41.      * @param callable|null $callback A valid PHP callback or null to set it later
  42.      *
  43.      * @return static
  44.      *
  45.      * @deprecated since Symfony 5.1, use __construct() instead.
  46.      */
  47.     public static function create($callback nullint $status 200, array $headers = [])
  48.     {
  49.         trigger_deprecation('symfony/http-foundation''5.1''The "%s()" method is deprecated, use "new %s()" instead.'__METHOD__, static::class);
  50.         return new static($callback$status$headers);
  51.     }
  52.     /**
  53.      * Sets the PHP callback associated with this Response.
  54.      *
  55.      * @return $this
  56.      */
  57.     public function setCallback(callable $callback)
  58.     {
  59.         $this->callback $callback;
  60.         return $this;
  61.     }
  62.     /**
  63.      * {@inheritdoc}
  64.      *
  65.      * This method only sends the headers once.
  66.      *
  67.      * @return $this
  68.      */
  69.     public function sendHeaders()
  70.     {
  71.         if ($this->headersSent) {
  72.             return $this;
  73.         }
  74.         $this->headersSent true;
  75.         return parent::sendHeaders();
  76.     }
  77.     /**
  78.      * {@inheritdoc}
  79.      *
  80.      * This method only sends the content once.
  81.      *
  82.      * @return $this
  83.      */
  84.     public function sendContent()
  85.     {
  86.         if ($this->streamed) {
  87.             return $this;
  88.         }
  89.         $this->streamed true;
  90.         if (null === $this->callback) {
  91.             throw new \LogicException('The Response callback must not be null.');
  92.         }
  93.         ($this->callback)();
  94.         return $this;
  95.     }
  96.     /**
  97.      * {@inheritdoc}
  98.      *
  99.      * @throws \LogicException when the content is not null
  100.      *
  101.      * @return $this
  102.      */
  103.     public function setContent(?string $content)
  104.     {
  105.         if (null !== $content) {
  106.             throw new \LogicException('The content cannot be set on a StreamedResponse instance.');
  107.         }
  108.         $this->streamed true;
  109.         return $this;
  110.     }
  111.     /**
  112.      * {@inheritdoc}
  113.      */
  114.     public function getContent()
  115.     {
  116.         return false;
  117.     }
  118. }