/** * @inheritdoc */ public function parse(ServerRequestInterface $request) { $acceptHeader = null; $contentTypeHeader = null; $method = $request->getMethod(); try { $header = $this->getHeader($request, HeaderInterface::HEADER_CONTENT_TYPE); $contentTypeHeader = Header::parse($header, HeaderInterface::HEADER_CONTENT_TYPE); } catch (InvalidArgumentException $exception) { E::throwException(new E([], E::HTTP_CODE_BAD_REQUEST, $exception)); } try { $header = $this->getHeader($request, HeaderInterface::HEADER_ACCEPT); $acceptHeader = AcceptHeader::parse($header); } catch (InvalidArgumentException $exception) { E::throwException(new E([], E::HTTP_CODE_BAD_REQUEST, $exception)); } return $this->factory->createHeaderParameters($method, $acceptHeader, $contentTypeHeader); }
/** * @param array $parameters * * @return SortParameterInterface[]|null */ protected function getSortParameters(array $parameters) { $sortParams = null; $sortParam = $this->getStringParamOrNull($parameters, self::PARAM_SORT); if ($sortParam !== null) { foreach (explode(',', $sortParam) as $param) { $isDesc = false; empty($param) === false ? $isDesc = $param[0] === '-' : E::throwException(new E([], E::HTTP_CODE_BAD_REQUEST)); $sortField = ltrim($param, '+-'); empty($sortField) === false ?: E::throwException(new E([], E::HTTP_CODE_BAD_REQUEST)); $sortParams[] = $this->factory->createSortParam($sortField, $isDesc === false); } } return $sortParams; }
/** * @param HttpFactoryInterface $factory * @param EncodingParametersInterface $parameters * @param ApiInterface $api * @throws JsonApiException */ private function checkEncodingParameters(HttpFactoryInterface $factory, EncodingParametersInterface $parameters, ApiInterface $api) { $checker = $factory->createQueryChecker($this->allowUnrecognizedParameters(), $this->allowedIncludePaths(), $this->allowedFieldSetTypes(), $this->allowedSortParameters(), $this->allowedPagingParameters($api->getPagingStrategy()), $this->allowedFilteringParameters()); $checker->checkQuery($parameters); }