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 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. class JsonResponder implements Responder
  8. {
  9. private $debug;
  10. public function __construct(bool $debug)
  11. {
  12. $this->debug = $debug;
  13. }
  14. public function error(int $error, string $argument, $details = null): ResponseInterface
  15. {
  16. $document = new ErrorDocument(new ErrorCode($error), $argument, $details);
  17. return ResponseFactory::fromObject($document->getStatus(), $document);
  18. }
  19. public function success($result): ResponseInterface
  20. {
  21. return ResponseFactory::fromObject(ResponseFactory::OK, $result);
  22. }
  23. public function exception($exception): ResponseInterface
  24. {
  25. $document = ErrorDocument::fromException($exception);
  26. $response = ResponseFactory::fromObject($document->getStatus(), $document);
  27. if ($this->debug) {
  28. $response = ResponseUtils::addExceptionHeaders($response, $exception);
  29. }
  30. return $response;
  31. }
  32. public function multi($results): ResponseInterface
  33. {
  34. $document = array();
  35. $success = true;
  36. foreach ($results as $i=>$result) {
  37. if ($result instanceof \Throwable) {
  38. $document[$i] = ErrorDocument::fromException($result);
  39. $success = false;
  40. } else {
  41. $document[$i] = $result;
  42. }
  43. }
  44. $status = $success ? ResponseFactory::OK : ResponseFactory::FAILED_DEPENDENCY;
  45. $response = ResponseFactory::fromObject($status, $document);
  46. foreach ($results as $i=>$result) {
  47. if ($result instanceof \Throwable) {
  48. if ($this->debug) {
  49. $response = ResponseUtils::addExceptionHeaders($response, $result);
  50. }
  51. }
  52. }
  53. return $response;
  54. }
  55. }