api de gestion de ticket, basé sur php-crud-api. Le but est de décorrélé les outils de gestion des données, afin
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

JsonResponder.php 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace Tqdev\PhpCrudApi\Controller;
  3. use Psr\Http\Message\ResponseInterface;
  4. use Tqdev\PhpCrudApi\Record\Document\ErrorDocument;
  5. use Tqdev\PhpCrudApi\Record\ErrorCode;
  6. use Tqdev\PhpCrudApi\ResponseFactory;
  7. use Tqdev\PhpCrudApi\ResponseUtils;
  8. class JsonResponder implements Responder
  9. {
  10. private $debug;
  11. public function __construct(bool $debug)
  12. {
  13. $this->debug = $debug;
  14. }
  15. public function error(int $error, string $argument, $details = null): ResponseInterface
  16. {
  17. $document = new ErrorDocument(new ErrorCode($error), $argument, $details);
  18. return ResponseFactory::fromObject($document->getStatus(), $document);
  19. }
  20. public function success($result): ResponseInterface
  21. {
  22. return ResponseFactory::fromObject(ResponseFactory::OK, $result);
  23. }
  24. public function exception($exception): ResponseInterface
  25. {
  26. $document = ErrorDocument::fromException($exception);
  27. $response = ResponseFactory::fromObject($document->getStatus(), $document);
  28. if ($this->debug) {
  29. $response = ResponseUtils::addExceptionHeaders($response, $exception);
  30. }
  31. return $response;
  32. }
  33. public function multi($results): ResponseInterface
  34. {
  35. $documents = array();
  36. $errors = array();
  37. $success = true;
  38. foreach ($results as $i => $result) {
  39. if ($result instanceof \Throwable) {
  40. $documents[$i] = null;
  41. $errors[$i] = ErrorDocument::fromException($result);
  42. $success = false;
  43. } else {
  44. $documents[$i] = $result;
  45. $errors[$i] = new ErrorDocument(new ErrorCode(0), '', null);
  46. }
  47. }
  48. $status = $success ? ResponseFactory::OK : ResponseFactory::FAILED_DEPENDENCY;
  49. $document = $success ? $documents : $errors;
  50. $response = ResponseFactory::fromObject($status, $document);
  51. foreach ($results as $i => $result) {
  52. if ($result instanceof \Throwable) {
  53. if ($this->debug) {
  54. $response = ResponseUtils::addExceptionHeaders($response, $result);
  55. }
  56. }
  57. }
  58. return $response;
  59. }
  60. }