|
29 | 29 | use Chevere\Parameter\Interfaces\ParameterInterface; |
30 | 30 | use Chevere\Parameter\Interfaces\ParametersAccessInterface; |
31 | 31 | use Chevere\Parameter\Interfaces\TypedInterface; |
| 32 | +use Chevere\Parameter\Interfaces\UnionParameterInterface; |
32 | 33 | use LogicException; |
33 | 34 | use PhpParser\Builder\Param; |
34 | 35 | use Psr\Http\Message\ResponseInterface; |
|
40 | 41 | use function Chevere\Parameter\arrayp; |
41 | 42 | use function Chevere\Parameter\arrayString; |
42 | 43 | use function Chevere\Parameter\mixed; |
| 44 | +use function Chevere\Parameter\parameters; |
43 | 45 | use function Chevere\Parameter\typed; |
44 | 46 |
|
45 | 47 | abstract class Controller extends BaseController implements ControllerInterface |
@@ -123,26 +125,31 @@ final public function withServerRequest(ServerRequestInterface $serverRequest): |
123 | 125 | $parsedBody = (array) $parsedBody; |
124 | 126 | } |
125 | 127 | $new->_body = $parsedBody ?? null; |
126 | | - if (! $new->_body && $serverRequest->getHeaderLine('Content-Type') === 'application/json') { |
127 | | - $streamed = $new->_bodyStream->__toString(); |
128 | | - $new->_body = json_decode($streamed, true); |
129 | | - if ($new->_body === null && $streamed !== '') { |
130 | | - $new->_body = $streamed; |
| 128 | + if ($serverRequest->getHeaderLine('Content-Type') === 'application/json') { |
| 129 | + if (! $new->_body) { |
| 130 | + $streamed = $new->_bodyStream->__toString(); |
| 131 | + $new->_body = json_decode($streamed, true); |
| 132 | + if ($new->_body === null && $streamed !== '') { |
| 133 | + $new->_body = $streamed; |
| 134 | + } |
131 | 135 | } |
132 | | - } |
133 | | - if ($new->_body === null) { |
134 | | - $new->_body = $streamed ?? $new->_bodyStream->__toString(); |
| 136 | + } elseif ($new->_body === null) { |
| 137 | + $new->_body = $new->_bodyStream->__toString(); |
135 | 138 | } |
136 | 139 | $acceptBody = $new::acceptBody(); |
137 | | - $acceptBody = $acceptBody instanceof ParametersAccessInterface |
138 | | - ? $acceptBody->parameters() |
139 | | - : arrayp(); |
140 | | - $new->_bodyParsed = arguments( |
141 | | - $acceptBody, |
142 | | - is_array($new->_body) |
143 | | - ? $new->_body |
144 | | - : ($parsedBody ?? []) |
145 | | - ); |
| 140 | + $new->_bodyParsed = arguments(parameters(), []); |
| 141 | + if ($acceptBody instanceof UnionParameterInterface) { |
| 142 | + $acceptBody->__invoke($new->_body); |
| 143 | + } else { |
| 144 | + if ($acceptBody instanceof ParametersAccessInterface) { |
| 145 | + $new->_bodyParsed = arguments( |
| 146 | + $acceptBody, |
| 147 | + is_array($new->_body) |
| 148 | + ? $new->_body |
| 149 | + : ($parsedBody ?? []) |
| 150 | + ); |
| 151 | + } |
| 152 | + } |
146 | 153 | } catch (Throwable $e) { |
147 | 154 | throw new ControllerException( |
148 | 155 | '[HTTP body] ' . $e->getMessage(), |
|
0 commit comments