You are here

trait MessageTrait in Zircon Profile 8.0

Same name in this branch
  1. 8.0 vendor/zendframework/zend-diactoros/src/MessageTrait.php \Zend\Diactoros\MessageTrait
  2. 8.0 vendor/guzzlehttp/psr7/src/MessageTrait.php \GuzzleHttp\Psr7\MessageTrait
Same name and namespace in other branches
  1. 8 vendor/guzzlehttp/psr7/src/MessageTrait.php \GuzzleHttp\Psr7\MessageTrait

Trait implementing functionality common to requests and responses.

Hierarchy

File

vendor/guzzlehttp/psr7/src/MessageTrait.php, line 9

Namespace

GuzzleHttp\Psr7
View source
trait MessageTrait {

  /** @var array Cached HTTP header collection with lowercase key to values */
  private $headers = [];

  /** @var array Actual key to list of values per header. */
  private $headerLines = [];

  /** @var string */
  private $protocol = '1.1';

  /** @var StreamInterface */
  private $stream;
  public function getProtocolVersion() {
    return $this->protocol;
  }
  public function withProtocolVersion($version) {
    if ($this->protocol === $version) {
      return $this;
    }
    $new = clone $this;
    $new->protocol = $version;
    return $new;
  }
  public function getHeaders() {
    return $this->headerLines;
  }
  public function hasHeader($header) {
    return isset($this->headers[strtolower($header)]);
  }
  public function getHeader($header) {
    $name = strtolower($header);
    return isset($this->headers[$name]) ? $this->headers[$name] : [];
  }
  public function getHeaderLine($header) {
    return implode(', ', $this
      ->getHeader($header));
  }
  public function withHeader($header, $value) {
    $new = clone $this;
    $header = trim($header);
    $name = strtolower($header);
    if (!is_array($value)) {
      $new->headers[$name] = [
        trim($value),
      ];
    }
    else {
      $new->headers[$name] = $value;
      foreach ($new->headers[$name] as &$v) {
        $v = trim($v);
      }
    }

    // Remove the header lines.
    foreach (array_keys($new->headerLines) as $key) {
      if (strtolower($key) === $name) {
        unset($new->headerLines[$key]);
      }
    }

    // Add the header line.
    $new->headerLines[$header] = $new->headers[$name];
    return $new;
  }
  public function withAddedHeader($header, $value) {
    if (!$this
      ->hasHeader($header)) {
      return $this
        ->withHeader($header, $value);
    }
    $new = clone $this;
    $new->headers[strtolower($header)][] = $value;
    $new->headerLines[$header][] = $value;
    return $new;
  }
  public function withoutHeader($header) {
    if (!$this
      ->hasHeader($header)) {
      return $this;
    }
    $new = clone $this;
    $name = strtolower($header);
    unset($new->headers[$name]);
    foreach (array_keys($new->headerLines) as $key) {
      if (strtolower($key) === $name) {
        unset($new->headerLines[$key]);
      }
    }
    return $new;
  }
  public function getBody() {
    if (!$this->stream) {
      $this->stream = stream_for('');
    }
    return $this->stream;
  }
  public function withBody(StreamInterface $body) {
    if ($body === $this->stream) {
      return $this;
    }
    $new = clone $this;
    $new->stream = $body;
    return $new;
  }
  private function setHeaders(array $headers) {
    $this->headerLines = $this->headers = [];
    foreach ($headers as $header => $value) {
      $header = trim($header);
      $name = strtolower($header);
      if (!is_array($value)) {
        $value = trim($value);
        $this->headers[$name][] = $value;
        $this->headerLines[$header][] = $value;
      }
      else {
        foreach ($value as $v) {
          $v = trim($v);
          $this->headers[$name][] = $v;
          $this->headerLines[$header][] = $v;
        }
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
MessageTrait::$headerLines private property @var array Actual key to list of values per header.
MessageTrait::$headers private property @var array Cached HTTP header collection with lowercase key to values
MessageTrait::$protocol private property @var string
MessageTrait::$stream private property @var StreamInterface
MessageTrait::getBody public function
MessageTrait::getHeader public function
MessageTrait::getHeaderLine public function
MessageTrait::getHeaders public function
MessageTrait::getProtocolVersion public function
MessageTrait::hasHeader public function
MessageTrait::setHeaders private function
MessageTrait::withAddedHeader public function
MessageTrait::withBody public function
MessageTrait::withHeader public function
MessageTrait::withoutHeader public function
MessageTrait::withProtocolVersion public function