Open Journal Systems  3.3.0
ResponseBuilder.php
1 <?php
2 
4 
6 
11 {
17  protected $response;
18 
24  public function __construct(ResponseInterface $response)
25  {
26  $this->response = $response;
27  }
28 
34  public function getResponse()
35  {
36  return $this->response;
37  }
38 
49  public function setHeadersFromArray(array $headers)
50  {
51  $status = array_shift($headers);
52  $this->setStatus($status);
53 
54  foreach ($headers as $headerLine) {
55  $headerLine = trim($headerLine);
56  if ('' === $headerLine) {
57  continue;
58  }
59 
60  $this->addHeader($headerLine);
61  }
62 
63  return $this;
64  }
65 
76  public function setHeadersFromString($headers)
77  {
78  if (!(is_string($headers)
79  || (is_object($headers) && method_exists($headers, '__toString')))
80  ) {
81  throw new \InvalidArgumentException(
82  sprintf(
83  '%s expects parameter 1 to be a string, %s given',
84  __METHOD__,
85  is_object($headers) ? get_class($headers) : gettype($headers)
86  )
87  );
88  }
89 
90  $this->setHeadersFromArray(explode("\r\n", $headers));
91 
92  return $this;
93  }
94 
104  public function setStatus($statusLine)
105  {
106  $parts = explode(' ', $statusLine, 3);
107  if (count($parts) < 2 || 0 !== strpos(strtolower($parts[0]), 'http/')) {
108  throw new \InvalidArgumentException(
109  sprintf('"%s" is not a valid HTTP status line', $statusLine)
110  );
111  }
112 
113  $reasonPhrase = count($parts) > 2 ? $parts[2] : '';
114  $this->response = $this->response
115  ->withStatus((int) $parts[1], $reasonPhrase)
116  ->withProtocolVersion(substr($parts[0], 5));
117 
118  return $this;
119  }
120 
130  public function addHeader($headerLine)
131  {
132  $parts = explode(':', $headerLine, 2);
133  if (2 !== count($parts)) {
134  throw new \InvalidArgumentException(
135  sprintf('"%s" is not a valid HTTP header line', $headerLine)
136  );
137  }
138  $name = trim($parts[0]);
139  $value = trim($parts[1]);
140  if ($this->response->hasHeader($name)) {
141  $this->response = $this->response->withAddedHeader($name, $value);
142  } else {
143  $this->response = $this->response->withHeader($name, $value);
144  }
145 
146  return $this;
147  }
148 }
Http\Message\Builder\ResponseBuilder\setStatus
setStatus($statusLine)
Definition: ResponseBuilder.php:107
Http\Message\Builder\ResponseBuilder\__construct
__construct(ResponseInterface $response)
Definition: ResponseBuilder.php:27
Http\Message\Builder\ResponseBuilder\$response
$response
Definition: ResponseBuilder.php:20
Http\Message\Builder\ResponseBuilder
Definition: ResponseBuilder.php:10
Psr\Http\Message\ResponseInterface
Definition: vendor/psr/http-message/src/ResponseInterface.php:20
Http\Message\Builder
Definition: ResponseBuilder.php:3
Http\Message\Builder\ResponseBuilder\getResponse
getResponse()
Definition: ResponseBuilder.php:37
Http\Message\Builder\ResponseBuilder\setHeadersFromArray
setHeadersFromArray(array $headers)
Definition: ResponseBuilder.php:52
Http\Message\Builder\ResponseBuilder\setHeadersFromString
setHeadersFromString($headers)
Definition: ResponseBuilder.php:79
Http\Message\Builder\ResponseBuilder\addHeader
addHeader($headerLine)
Definition: ResponseBuilder.php:133