1: <?php
2:
3: namespace PHPixie\HTTP;
4: use Psr\Http\Message\StreamInterface;
5: use Psr\Http\Message\UriInterface;
6:
7: /**
8: * Factory for PSR-7 implementations
9: */
10: class Messages
11: {
12: /**
13: * Build a PSR-7 message
14: * @param $protocolVersion
15: * @param $headers
16: * @param $body
17: * @return Messages\Message\Implementation
18: */
19: public function message($protocolVersion, $headers, $body)
20: {
21: return new Messages\Message\Implementation(
22: $protocolVersion,
23: $headers,
24: $body
25: );
26: }
27:
28: /**
29: * Build a PSR-7 request
30: * @param $protocolVersion
31: * @param $headers
32: * @param $body
33: * @param $method
34: * @param $uri
35: * @return Messages\Message\Request\Implementation
36: */
37: public function request($protocolVersion, $headers, $body, $method, $uri)
38: {
39: return new Messages\Message\Request\Implementation(
40: $protocolVersion,
41: $headers,
42: $body,
43: $method,
44: $uri
45: );
46: }
47:
48: /**
49: * Build a PSR-7 serverRequest
50: * @param string $protocolVersion
51: * @param array $headers
52: * @param StreamInterface $body
53: * @param string $method
54: * @param UriInterface $uri
55: * @param array $serverParams
56: * @param array $queryParams
57: * @param null|array|object $parsedBody
58: * @param array $cookieParams
59: * @param array $uploadedFiles
60: * @param array $attributes
61: * @return Messages\Message\Request\ServerRequest\Implementation
62: */
63: public function serverRequest(
64: $protocolVersion,
65: $headers,
66: $body,
67: $method,
68: $uri,
69: $serverParams,
70: $queryParams,
71: $parsedBody,
72: $cookieParams,
73: $uploadedFiles,
74: $attributes = array()
75: ) {
76: return new Messages\Message\Request\ServerRequest\Implementation(
77: $protocolVersion,
78: $headers,
79: $body,
80: $method,
81: $uri,
82: $serverParams,
83: $queryParams,
84: $parsedBody,
85: $cookieParams,
86: $uploadedFiles,
87: $attributes
88: );
89: }
90:
91: /**
92: * Build a server request from SAPI,
93: * with the ability to override individual attributes
94: * @param array|null $server
95: * @param array|null $get
96: * @param array|null $post
97: * @param array|null $cookie
98: * @param array|null $files
99: * @param array $attributes
100: * @return Messages\Message\Request\ServerRequest\SAPI
101: */
102: public function sapiServerRequest(
103: $server = null,
104: $get = null,
105: $post = null,
106: $cookie = null,
107: $files = null,
108: $attributes = array()
109: ) {
110: return new Messages\Message\Request\ServerRequest\SAPI(
111: $this,
112: $server !== null ? $server : $_SERVER,
113: $get !== null ? $get : $_GET,
114: $post !== null ? $post : $_POST,
115: $cookie !== null ? $cookie : $_COOKIE,
116: $files !== null ? $files : $_FILES,
117: $attributes
118: );
119: }
120:
121: /**
122: * Build a PSR-7 response
123: * @param string $protocolVersion
124: * @param array $headers
125: * @param StreamInterface $body
126: * @param int $statusCode
127: * @param string|null $reasonPhrase
128: * @return Messages\Message\Response
129: */
130: public function response($protocolVersion, $headers, $body, $statusCode = 200, $reasonPhrase = null)
131: {
132: return new Messages\Message\Response(
133: $protocolVersion,
134: $headers,
135: $body,
136: $statusCode,
137: $reasonPhrase
138: );
139: }
140:
141: /**
142: * Build a PSR-7 stream
143: * @param string $uri
144: * @param string $mode
145: * @return Messages\Stream\Implementation
146: */
147: public function stream($uri, $mode = 'r')
148: {
149: return new Messages\Stream\Implementation($uri, $mode);
150: }
151:
152: /**
153: * String stream
154: * @param string $string
155: * @return Messages\Stream\StringStream
156: */
157: public function stringStream($string = '')
158: {
159: return new Messages\Stream\StringStream($string);
160: }
161:
162: /**
163: * Build a PSR-7 URI from string
164: * @param string $uri
165: * @return Messages\URI\Implementation
166: */
167: public function uri($uri)
168: {
169: return new Messages\URI\Implementation($uri);
170: }
171:
172: /**
173: * Build a PSR-7 URI from SAPI globals,
174: * with the ability to override $_SERVER data
175: * @param array|null $server
176: * @return Messages\URI\SAPI
177: */
178: public function sapiUri($server = null)
179: {
180: return new Messages\URI\SAPI(
181: $server !== null ? $server : $_SERVER
182: );
183: }
184:
185: /**
186: * Build a PSR-7 uploaded file representation
187: * @param string $file File path
188: * @param string|null $clientFilename
189: * @param string|null $clientMediaType
190: * @param int|null $size
191: * @param int|int $error
192: * @return Messages\UploadedFile\Implementation
193: */
194: public function uploadedFile(
195: $file,
196: $clientFilename = null,
197: $clientMediaType = null,
198: $size = null,
199: $error = UPLOAD_ERR_OK
200: ) {
201: return new Messages\UploadedFile\Implementation(
202: $this,
203: $file,
204: $clientFilename,
205: $clientMediaType,
206: $size,
207: $error
208: );
209: }
210:
211: /**
212: * Build PSR-7 upload file representation from SAPI data
213: * @param $fileData
214: * @return Messages\UploadedFile\SAPI
215: */
216: public function sapiUploadedFile($fileData)
217: {
218: return new Messages\UploadedFile\SAPI($this, $fileData);
219: }
220: }