Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
Request.php
001 <?php
002 namespace GuzzleHttp\Message;
003
004 use GuzzleHttp\Collection;
005 use GuzzleHttp\Event\HasEmitterTrait;
006 use GuzzleHttp\Subscriber\Prepare;
007 use GuzzleHttp\Url;
008
009 /**
010 * HTTP request class to send requests
011 */
012 class Request extends AbstractMessage implements RequestInterface
013 {
014 use HasEmitterTrait;
015
016 /** @var Url HTTP Url */
017 private $url;
018
019 /** @var string HTTP method */
020 private $method;
021
022 /** @var Collection Transfer options */
023 private $transferOptions;
024
025 /**
026 * @param string $method HTTP method
027 * @param string|Url $url HTTP URL to connect to. The URI scheme,
028 * host header, and URI are parsed from the full URL. If query string
029 * parameters are present they will be parsed as well.
030 * @param array|Collection $headers HTTP headers
031 * @param mixed $body Body to send with the request
032 * @param array $options Array of options to use with the request
033 * - emitter: Event emitter to use with the request
034 */
035 public function __construct(
036 $method,
037 $url,
038 $headers = [],
039 $body = null,
040 array $options = []
041 ) {
042 $this->setUrl($url);
043 $this->method = strtoupper($method);
044 $this->handleOptions($options);
045 $this->transferOptions = new Collection($options);
046 $this->addPrepareEvent();
047
048 if ($body !== null) {
049 $this->setBody($body);
050 }
051
052 if ($headers) {
053 foreach ($headers as $key => $value) {
054 $this->addHeader($key, $value);
055 }
056 }
057 }
058
059 public function __clone()
060 {
061 if ($this->emitter) {
062 $this->emitter = clone $this->emitter;
063 }
064 $this->transferOptions = clone $this->transferOptions;
065 $this->url = clone $this->url;
066 }
067
068 public function setUrl($url)
069 {
070 $this->url = $url instanceof Url ? $url : Url::fromString($url);
071 $this->updateHostHeaderFromUrl();
072 }
073
074 public function getUrl()
075 {
076 return (string) $this->url;
077 }
078
079 public function setQuery($query)
080 {
081 $this->url->setQuery($query);
082 }
083
084 public function getQuery()
085 {
086 return $this->url->getQuery();
087 }
088
089 public function setMethod($method)
090 {
091 $this->method = strtoupper($method);
092 }
093
094 public function getMethod()
095 {
096 return $this->method;
097 }
098
099 public function getScheme()
100 {
101 return $this->url->getScheme();
102 }
103
104 public function setScheme($scheme)
105 {
106 $this->url->setScheme($scheme);
107 }
108
109 public function getPort()
110 {
111 return $this->url->getPort();
112 }
113
114 public function setPort($port)
115 {
116 $this->url->setPort($port);
117 $this->updateHostHeaderFromUrl();
118 }
119
120 public function getHost()
121 {
122 return $this->url->getHost();
123 }
124
125 public function setHost($host)
126 {
127 $this->url->setHost($host);
128 $this->updateHostHeaderFromUrl();
129 }
130
131 public function getPath()
132 {
133 return '/' . ltrim($this->url->getPath(), '/');
134 }
135
136 public function setPath($path)
137 {
138 $this->url->setPath($path);
139 }
140
141 public function getResource()
142 {
143 $resource = $this->getPath();
144 if ($query = (string) $this->url->getQuery()) {
145 $resource .= '?' . $query;
146 }
147
148 return $resource;
149 }
150
151 public function getConfig()
152 {
153 return $this->transferOptions;
154 }
155
156 protected function handleOptions(array &$options)
157 {
158 parent::handleOptions($options);
159 // Use a custom emitter if one is specified, and remove it from
160 // options that are exposed through getConfig()
161 if (isset($options['emitter'])) {
162 $this->emitter = $options['emitter'];
163 unset($options['emitter']);
164 }
165 }
166
167 /**
168 * Adds a subscriber that ensures a request's body is prepared before
169 * sending.
170 */
171 private function addPrepareEvent()
172 {
173 static $subscriber;
174 if (!$subscriber) {
175 $subscriber = new Prepare();
176 }
177
178 $this->getEmitter()->attach($subscriber);
179 }
180
181 private function updateHostHeaderFromUrl()
182 {
183 $port = $this->url->getPort();
184 $scheme = $this->url->getScheme();
185 if ($host = $this->url->getHost()) {
186 if (($port == 80 && $scheme == 'http') ||
187 ($port == 443 && $scheme == 'https')
188 ) {
189 $this->setHeader('Host', $host);
190 } else {
191 $this->setHeader('Host', "{$host}:{$port}");
192 }
193 }
194 }
195 }
196