1: <?php
2:
3: namespace PHPixie;
4:
5: use PHPixie\HTTP\Messages\Message\Request;
6:
7: /**
8: * HTTP component
9: */
10: class HTTP
11: {
12: /**
13: * @var HTTP\Builder
14: */
15: protected $builder;
16:
17: /**
18: * Constructor
19: * @param Slice $slice
20: */
21: public function __construct($slice)
22: {
23: $this->builder = $this->buildBuilder($slice);
24: }
25:
26: /**
27: * Create a PSR 7 ServerRequest from globals
28: * @return Request\ServerRequest\SAPI
29: */
30: public function sapiServerRequest()
31: {
32: return $this->builder->messages()->sapiServerRequest();
33: }
34:
35: /**
36: * Create PHPixie request from server request.
37: *
38: * If the server request is not specified it will be created
39: * from globals
40: * @param Request\ServerRequest $serverRequest
41: * @return HTTP\Request
42: */
43: public function request($serverRequest = null)
44: {
45: if ($serverRequest === null) {
46: $serverRequest = $this->sapiServerRequest();
47: }
48: return $this->builder->request($serverRequest);
49: }
50:
51: /**
52: * Output a HTTP response
53: * @param HTTP\Responses\Response $response
54: * @param HTTP\Context $context Optional HTTP context to use (e.g. for cookie data)
55: * @return void
56: */
57: public function output($response, $context = null)
58: {
59: $this->builder->output()->response($response, $context);
60: }
61:
62: /**
63: * Output a PSR-7 response message
64: * @param HTTP\Responses\Response $responseMessage
65: * @return void
66: */
67: public function outputResponseMessage($responseMessage)
68: {
69: $this->builder->output()->responseMessage($responseMessage);
70: }
71:
72: /**
73: * Create a context from a HTTP request
74: * @param HTTP\Request $request
75: * @param HTTP\Context\Session $session Optional session container,
76: * if not specified the default PHP session storage is used
77: * @return HTTP\Context
78: */
79: public function context($request, $session = null)
80: {
81: $serverRequest = $request->serverRequest();
82: $cookieArray = $serverRequest->getCookieParams();
83: $cookies = $this->builder->cookies($cookieArray);
84: if ($session === null) {
85: $session = $this->builder->sapiSession();
86: }
87:
88: return $this->builder->context($request, $cookies, $session);
89: }
90:
91: /**
92: * Create a context container
93: * @param HTTP\Context $context
94: * @return HTTP\Context\Container\Implementation
95: */
96: public function contextContainer($context)
97: {
98: return $this->builder->contextContainer($context);
99: }
100:
101: /**
102: * Message factory
103: * @return HTTP\Messages
104: */
105: public function messages()
106: {
107: return $this->builder->messages();
108: }
109:
110: /**
111: * Response factory
112: * @return HTTP\Responses
113: */
114: public function responses()
115: {
116: return $this->builder->responses();
117: }
118:
119: /**
120: * Get internal factory
121: * @return HTTP\Builder
122: */
123: public function builder()
124: {
125: return $this->builder;
126: }
127:
128: /**
129: * @param Slice $slice
130: * @return HTTP\Builder
131: */
132: protected function buildBuilder($slice)
133: {
134: return new HTTP\Builder($slice);
135: }
136: }