コード例 #1
0
 /**
  * {@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());
     }
 }
コード例 #2
0
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var $context Context */
     /** @var $context Context */
     if (null !== $context->getResponseStatusCode()) {
         // the status code is already set
         return;
     }
     $statusCode = Response::HTTP_OK;
     if ($context->hasErrors()) {
         $groupedCodes = [];
         foreach ($context->getErrors() as $error) {
             $code = $error->getStatusCode() ?: Response::HTTP_INTERNAL_SERVER_ERROR;
             $groupCode = (int) floor($code / 100) * 100;
             $groupedCodes[$groupCode][] = $code;
         }
         if (!empty($groupedCodes)) {
             $maxGroup = max(array_keys($groupedCodes));
             $statusCode = $maxGroup;
             if (count($groupedCodes[$maxGroup]) === 1) {
                 $statusCode = array_pop($groupedCodes[$maxGroup]);
             }
         } else {
             $statusCode = Response::HTTP_INTERNAL_SERVER_ERROR;
         }
     }
     $context->setResponseStatusCode($statusCode);
 }
コード例 #3
0
ファイル: ProcessErrors.php プロジェクト: Maksold/platform
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var Context $context */
     if (!$context->hasErrors()) {
         // no errors
         return;
     }
     $errors = $context->getErrors();
     $error = $errors[0];
     $exception = $error->getInnerException();
     if (null !== $exception) {
         $underlyingException = ExceptionUtil::getProcessorUnderlyingException($exception);
         if ($underlyingException instanceof HttpExceptionInterface) {
             $exception = $underlyingException;
         }
     } else {
         $message = $error->getDetail();
         if (empty($message)) {
             $message = $error->getTitle();
         }
         if (empty($message)) {
             $message = 'Unknown error.';
         }
         $exception = new \RuntimeException($message);
     }
     throw $exception;
 }
コード例 #4
0
ファイル: NormalizeErrors.php プロジェクト: Maksold/platform
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var Context $context */
     if (!$context->hasErrors()) {
         // no errors
         return;
     }
     $errors = $context->getErrors();
     $context->resetErrors();
     foreach ($errors as $error) {
         $error->trans($this->translator);
         $context->addError($error);
     }
 }