EntityDataPersister.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace App\DataPersister;
  3. use ApiPlatform\Core\DataPersister\ContextAwareDataPersisterInterface;
  4. use App\Service\OnChange\Organization\OnChangeContext;
  5. use App\Service\OnChange\Organization\OnChangeDefault;
  6. use App\Service\OnChange\Organization\OnChangeInterface;
  7. use Symfony\Contracts\Service\Attribute\Required;
  8. /**
  9. * Classe de base pour les DataPersister classiques, proposant des hook pre et post persist,
  10. * ainsi que certaines méthodes liées au contexte de la mise à jour.
  11. */
  12. class EntityDataPersister implements ContextAwareDataPersisterInterface
  13. {
  14. // <-- dependencies injections
  15. protected ContextAwareDataPersisterInterface $contextAwareDataPersister;
  16. protected OnChangeInterface $onChange;
  17. #[Required]
  18. public function setContextAwareDataPersister(ContextAwareDataPersisterInterface $contextAwareDataPersister): void {$this->contextAwareDataPersister = $contextAwareDataPersister;}
  19. public function __construct(
  20. OnChangeDefault $onChange
  21. ) {
  22. $this->onChange = $onChange;
  23. }
  24. // dependencies injections -->
  25. public function supports($data, array $context = []): bool
  26. {
  27. return false;
  28. }
  29. /**
  30. * Persist l'entité et déclenche les différents hooks de la classe OnChangeInterface définie par le data persister
  31. *
  32. * @param mixed $data
  33. * @param array $context
  34. * @return object|void
  35. */
  36. public function persist($data, array $context = [])
  37. {
  38. $onChangeContext = new OnChangeContext($context);
  39. $this->onChange->validate($data, $onChangeContext);
  40. $data = $this->onChange->preProcess($data, $onChangeContext);
  41. $this->onChange->beforeChange($data, $onChangeContext);
  42. $result = $this->contextAwareDataPersister->persist($data, $context);
  43. $this->onChange->onChange($data, $onChangeContext);
  44. return $result;
  45. }
  46. /**
  47. * La fonction native 'remove' n'est pas supportée par défaut, la réimplémenter au besoin
  48. *
  49. * @param mixed $data
  50. * @param array $context
  51. */
  52. public function remove($data, array $context = []): void {
  53. throw new \RuntimeException('not supported', 500);
  54. }
  55. }