| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 | <?php/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Component\HttpFoundation;/** * StreamedResponse represents a streamed HTTP response. * * A StreamedResponse uses a callback for its content. * * The callback should use the standard PHP functions like echo * to stream the response back to the client. The flush() method * can also be used if needed. * * @see flush() * * @author Fabien Potencier <fabien@symfony.com> * * @api */class StreamedResponse extends Response{    protected $callback;    protected $streamed;    /**     * Constructor.     *     * @param mixed   $callback A valid PHP callback     * @param integer $status   The response status code     * @param array   $headers  An array of response headers     *     * @api     */    public function __construct($callback = null, $status = 200, $headers = array())    {        parent::__construct(null, $status, $headers);        if (null !== $callback) {            $this->setCallback($callback);        }        $this->streamed = false;    }    /**     * {@inheritDoc}     */    public static function create($callback = null, $status = 200, $headers = array())    {        return new static($callback, $status, $headers);    }    /**     * Sets the PHP callback associated with this Response.     *     * @param mixed $callback A valid PHP callback     */    public function setCallback($callback)    {        if (!is_callable($callback)) {            throw new \LogicException('The Response callback must be a valid PHP callable.');        }        $this->callback = $callback;    }    /**     * @{inheritdoc}     */    public function prepare(Request $request)    {        if ('1.0' != $request->server->get('SERVER_PROTOCOL')) {            $this->setProtocolVersion('1.1');        }        $this->headers->set('Cache-Control', 'no-cache');        parent::prepare($request);    }    /**     * @{inheritdoc}     *     * This method only sends the content once.     */    public function sendContent()    {        if ($this->streamed) {            return;        }        $this->streamed = true;        if (null === $this->callback) {            throw new \LogicException('The Response callback must not be null.');        }        call_user_func($this->callback);    }    /**     * @{inheritdoc}     *     * @throws \LogicException when the content is not null     */    public function setContent($content)    {        if (null !== $content) {            throw new \LogicException('The content cannot be set on a StreamedResponse instance.');        }    }    /**     * @{inheritdoc}     *     * @return false     */    public function getContent()    {        return false;    }}
 |