Subversion Repositories cheapmusic

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
103 - 1
<?php
2
 
3
namespace Psr\Http\Message;
4
 
5
/**
6
 * Representation of an incoming, server-side HTTP request.
7
 *
8
 * Per the HTTP specification, this interface includes properties for
9
 * each of the following:
10
 *
11
 * - Protocol version
12
 * - HTTP method
13
 * - URI
14
 * - Headers
15
 * - Message body
16
 *
17
 * Additionally, it encapsulates all data as it has arrived to the
18
 * application from the CGI and/or PHP environment, including:
19
 *
20
 * - The values represented in $_SERVER.
21
 * - Any cookies provided (generally via $_COOKIE)
22
 * - Query string arguments (generally via $_GET, or as parsed via parse_str())
23
 * - Upload files, if any (as represented by $_FILES)
24
 * - Deserialized body parameters (generally from $_POST)
25
 *
26
 * $_SERVER values MUST be treated as immutable, as they represent application
27
 * state at the time of request; as such, no methods are provided to allow
28
 * modification of those values. The other values provide such methods, as they
29
 * can be restored from $_SERVER or the request body, and may need treatment
30
 * during the application (e.g., body parameters may be deserialized based on
31
 * content type).
32
 *
33
 * Additionally, this interface recognizes the utility of introspecting a
34
 * request to derive and match additional parameters (e.g., via URI path
35
 * matching, decrypting cookie values, deserializing non-form-encoded body
36
 * content, matching authorization headers to users, etc). These parameters
37
 * are stored in an "attributes" property.
38
 *
39
 * Requests are considered immutable; all methods that might change state MUST
40
 * be implemented such that they retain the internal state of the current
41
 * message and return an instance that contains the changed state.
42
 */
43
interface ServerRequestInterface extends RequestInterface
44
{
45
    /**
46
     * Retrieve server parameters.
47
     *
48
     * Retrieves data related to the incoming request environment,
49
     * typically derived from PHP's $_SERVER superglobal. The data IS NOT
50
     * REQUIRED to originate from $_SERVER.
51
     *
52
     * @return array
53
     */
54
    public function getServerParams();
55
 
56
    /**
57
     * Retrieve cookies.
58
     *
59
     * Retrieves cookies sent by the client to the server.
60
     *
61
     * The data MUST be compatible with the structure of the $_COOKIE
62
     * superglobal.
63
     *
64
     * @return array
65
     */
66
    public function getCookieParams();
67
 
68
    /**
69
     * Return an instance with the specified cookies.
70
     *
71
     * The data IS NOT REQUIRED to come from the $_COOKIE superglobal, but MUST
72
     * be compatible with the structure of $_COOKIE. Typically, this data will
73
     * be injected at instantiation.
74
     *
75
     * This method MUST NOT update the related Cookie header of the request
76
     * instance, nor related values in the server params.
77
     *
78
     * This method MUST be implemented in such a way as to retain the
79
     * immutability of the message, and MUST return an instance that has the
80
     * updated cookie values.
81
     *
82
     * @param array $cookies Array of key/value pairs representing cookies.
83
     * @return static
84
     */
85
    public function withCookieParams(array $cookies);
86
 
87
    /**
88
     * Retrieve query string arguments.
89
     *
90
     * Retrieves the deserialized query string arguments, if any.
91
     *
92
     * Note: the query params might not be in sync with the URI or server
93
     * params. If you need to ensure you are only getting the original
94
     * values, you may need to parse the query string from `getUri()->getQuery()`
95
     * or from the `QUERY_STRING` server param.
96
     *
97
     * @return array
98
     */
99
    public function getQueryParams();
100
 
101
    /**
102
     * Return an instance with the specified query string arguments.
103
     *
104
     * These values SHOULD remain immutable over the course of the incoming
105
     * request. They MAY be injected during instantiation, such as from PHP's
106
     * $_GET superglobal, or MAY be derived from some other value such as the
107
     * URI. In cases where the arguments are parsed from the URI, the data
108
     * MUST be compatible with what PHP's parse_str() would return for
109
     * purposes of how duplicate query parameters are handled, and how nested
110
     * sets are handled.
111
     *
112
     * Setting query string arguments MUST NOT change the URI stored by the
113
     * request, nor the values in the server params.
114
     *
115
     * This method MUST be implemented in such a way as to retain the
116
     * immutability of the message, and MUST return an instance that has the
117
     * updated query string arguments.
118
     *
119
     * @param array $query Array of query string arguments, typically from
120
     *     $_GET.
121
     * @return static
122
     */
123
    public function withQueryParams(array $query);
124
 
125
    /**
126
     * Retrieve normalized file upload data.
127
     *
128
     * This method returns upload metadata in a normalized tree, with each leaf
129
     * an instance of Psr\Http\Message\UploadedFileInterface.
130
     *
131
     * These values MAY be prepared from $_FILES or the message body during
132
     * instantiation, or MAY be injected via withUploadedFiles().
133
     *
134
     * @return array An array tree of UploadedFileInterface instances; an empty
135
     *     array MUST be returned if no data is present.
136
     */
137
    public function getUploadedFiles();
138
 
139
    /**
140
     * Create a new instance with the specified uploaded files.
141
     *
142
     * This method MUST be implemented in such a way as to retain the
143
     * immutability of the message, and MUST return an instance that has the
144
     * updated body parameters.
145
     *
146
     * @param array $uploadedFiles An array tree of UploadedFileInterface instances.
147
     * @return static
148
     * @throws \InvalidArgumentException if an invalid structure is provided.
149
     */
150
    public function withUploadedFiles(array $uploadedFiles);
151
 
152
    /**
153
     * Retrieve any parameters provided in the request body.
154
     *
155
     * If the request Content-Type is either application/x-www-form-urlencoded
156
     * or multipart/form-data, and the request method is POST, this method MUST
157
     * return the contents of $_POST.
158
     *
159
     * Otherwise, this method may return any results of deserializing
160
     * the request body content; as parsing returns structured content, the
161
     * potential types MUST be arrays or objects only. A null value indicates
162
     * the absence of body content.
163
     *
164
     * @return null|array|object The deserialized body parameters, if any.
165
     *     These will typically be an array or object.
166
     */
167
    public function getParsedBody();
168
 
169
    /**
170
     * Return an instance with the specified body parameters.
171
     *
172
     * These MAY be injected during instantiation.
173
     *
174
     * If the request Content-Type is either application/x-www-form-urlencoded
175
     * or multipart/form-data, and the request method is POST, use this method
176
     * ONLY to inject the contents of $_POST.
177
     *
178
     * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of
179
     * deserializing the request body content. Deserialization/parsing returns
180
     * structured data, and, as such, this method ONLY accepts arrays or objects,
181
     * or a null value if nothing was available to parse.
182
     *
183
     * As an example, if content negotiation determines that the request data
184
     * is a JSON payload, this method could be used to create a request
185
     * instance with the deserialized parameters.
186
     *
187
     * This method MUST be implemented in such a way as to retain the
188
     * immutability of the message, and MUST return an instance that has the
189
     * updated body parameters.
190
     *
191
     * @param null|array|object $data The deserialized body data. This will
192
     *     typically be in an array or object.
193
     * @return static
194
     * @throws \InvalidArgumentException if an unsupported argument type is
195
     *     provided.
196
     */
197
    public function withParsedBody($data);
198
 
199
    /**
200
     * Retrieve attributes derived from the request.
201
     *
202
     * The request "attributes" may be used to allow injection of any
203
     * parameters derived from the request: e.g., the results of path
204
     * match operations; the results of decrypting cookies; the results of
205
     * deserializing non-form-encoded message bodies; etc. Attributes
206
     * will be application and request specific, and CAN be mutable.
207
     *
208
     * @return array Attributes derived from the request.
209
     */
210
    public function getAttributes();
211
 
212
    /**
213
     * Retrieve a single derived request attribute.
214
     *
215
     * Retrieves a single derived request attribute as described in
216
     * getAttributes(). If the attribute has not been previously set, returns
217
     * the default value as provided.
218
     *
219
     * This method obviates the need for a hasAttribute() method, as it allows
220
     * specifying a default value to return if the attribute is not found.
221
     *
222
     * @see getAttributes()
223
     * @param string $name The attribute name.
224
     * @param mixed $default Default value to return if the attribute does not exist.
225
     * @return mixed
226
     */
227
    public function getAttribute($name, $default = null);
228
 
229
    /**
230
     * Return an instance with the specified derived request attribute.
231
     *
232
     * This method allows setting a single derived request attribute as
233
     * described in getAttributes().
234
     *
235
     * This method MUST be implemented in such a way as to retain the
236
     * immutability of the message, and MUST return an instance that has the
237
     * updated attribute.
238
     *
239
     * @see getAttributes()
240
     * @param string $name The attribute name.
241
     * @param mixed $value The value of the attribute.
242
     * @return static
243
     */
244
    public function withAttribute($name, $value);
245
 
246
    /**
247
     * Return an instance that removes the specified derived request attribute.
248
     *
249
     * This method allows removing a single derived request attribute as
250
     * described in getAttributes().
251
     *
252
     * This method MUST be implemented in such a way as to retain the
253
     * immutability of the message, and MUST return an instance that removes
254
     * the attribute.
255
     *
256
     * @see getAttributes()
257
     * @param string $name The attribute name.
258
     * @return static
259
     */
260
    public function withoutAttribute($name);
261
}