/** * {@inheritdoc} */ public function process(ContextInterface $context) { /** @var GetListContext $context */ $documentBuilder = $this->documentBuilderFactory->createDocumentBuilder(); try { if ($context->hasErrors()) { $documentBuilder->setErrorCollection($context->getErrors()); // remove errors from the Context to avoid processing them by other processors $context->resetErrors(); } elseif ($context->hasResult()) { $result = $context->getResult(); if (empty($result)) { $documentBuilder->setDataCollection($result); } else { $documentBuilder->setDataCollection($result, $context->getMetadata()); } } $context->setResult($documentBuilder->getDocument()); } catch (\Exception $e) { $context->setResponseStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR); $error = new Error(); $error->setInnerException($e); $documentBuilder = $this->documentBuilderFactory->createDocumentBuilder(); $documentBuilder->setErrorObject($error); $context->setResult($documentBuilder->getDocument()); } }
/** * {@inheritdoc} */ public function process(ContextInterface $context) { /** @var Context $context */ $entityClass = $context->getClassName(); if (!$this->doctrineHelper->isManageableEntityClass($entityClass)) { // only manageable entities are supported return; } $filters = $context->getFilters(); if ($filters->has(self::FILTER_KEY)) { // filters have been already set return; } $fieldFilter = new FieldsFilter(DataType::STRING, self::FILTER_KEY_DESCRIPTION); $fieldFilter->setArrayAllowed(true); $filters->add(sprintf(self::FILTER_KEY_TEMPLATE, $this->entityClassTransformer->transform($entityClass)), $fieldFilter); $associations = $context->getMetadata()->getAssociations(); if (!$associations) { // no associations - no sense to add associations fields filters return; } $associationKeys = array_keys($associations); foreach ($associationKeys as $association) { $filters->add(sprintf(self::FILTER_KEY_TEMPLATE, $association), $fieldFilter); } }