public function fromHTTPRequest(Request $request) { $body = $request->getBody(); $meta = array(); // override method $rqMethodHeader = 'X-Psc-Cms-Request-Method'; if (in_array($method = $request->getHeaderField($rqMethodHeader), array(Service::PUT, Service::DELETE))) { $this->log('Request-Method durch HTTP-Header ' . $rqMethodHeader . ' überschrieben zu: ' . $method); unset($body->{$rqMethodHeader}); } else { $method = constant('Psc\\Net\\Service::' . $request->getMethod()); // Request::GET => ServiceRequest::GET } // revision $revisionHeader = 'X-Psc-Cms-Revision'; if (($revision = $request->getHeaderField($revisionHeader)) != '') { $meta['revision'] = $revision; unset($body->{$revisionHeader}); } // convert bodyAsJSON to native if (is_object($body) && count($body) === 1 && isset($body->bodyAsJSON)) { $body = $this->jsonConverter->parse($body->bodyAsJSON); } // convert json request to native if (is_string($body) && $request->isContentType('application/json')) { $body = $this->jsonConverter->parse($body); } return new ServiceRequest($method, $request->getParts(), $body, $request->getQuery(), $request->getFiles(), $meta); }