/** * Load JSON API configuration from controller annotations * * @param FilterControllerEvent $event */ public function onKernelController(FilterControllerEvent $event) { $controller = $event->getController(); if (!is_array($controller)) { return; } $config = null; $refClass = new \ReflectionClass($controller[0]); if (null !== ($annotation = $this->reader->getClassAnnotation($refClass, ApiRequest::class))) { /* @var $annotation ApiRequest */ $config = $annotation->toArray(); } $refMethod = $refClass->getMethod($controller[1]); if (null !== ($annotation = $this->reader->getMethodAnnotation($refMethod, ApiRequest::class))) { if (null !== $config) { $config = array_replace($config, $annotation->toArray()); } else { $config = $annotation->toArray(); } } if (null !== $config) { if (!array_key_exists('matcher', $config)) { $config['matcher'] = $this->defMatcher; } $event->getRequest()->attributes->set('_jsonapi', $this->factory->createEnvironment($config)); } }
/** * Parse request query parameters * * @param Request $request * @param EnvironmentInterface $environment * @return \Neomerx\JsonApi\Contracts\Encoder\Parameters\EncodingParametersInterface|null */ private function parseQuery(Request $request, EnvironmentInterface $environment) { if (null === $environment->getQueryType()) { return null; } $queryParser = $this->factory->createQueryParametersParser(); if ($queryParser instanceof QueryParametersParserInterface) { $queryParser->setDataParser($this->parser)->setQueryType($environment->getQueryType()); } return $queryParser->parse($this->createPsr7Request($request)); }
/** * Returns schemas container * * @param FactoryInterface $factory * @return ContainerInterface */ private function getContainer(FactoryInterface $factory) { if (null === $this->container) { $this->container = $factory->createContainer($this->getSchemas($factory)); } return $this->container; }