BuilderIterator.php 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service\ServiceIterator\Mailer;
  4. use App\Service\Mailer\Builder\BuilderInterface;
  5. use App\Service\Mailer\Model\MailerModelInterface;
  6. /**
  7. * Permet d'itérer sur les services de build Mailer.
  8. */
  9. class BuilderIterator
  10. {
  11. /**
  12. * Pour l'injection des services, voir config/services.yaml, section 'TAG Services'.
  13. *
  14. * @param iterable<BuilderInterface> $builderServices
  15. */
  16. public function __construct(
  17. private readonly iterable $builderServices,
  18. ) {
  19. }
  20. /**
  21. * Itère sur les services de build disponibles et
  22. * retourne le premier qui supporte ce type de requête.
  23. *
  24. * @throws \Exception
  25. */
  26. public function getBuilderFor(MailerModelInterface $mailerModel): BuilderInterface
  27. {
  28. /** @var BuilderInterface $builderService */
  29. foreach ($this->builderServices as $builderService) {
  30. if ($builderService->support($mailerModel)) {
  31. return $builderService;
  32. }
  33. }
  34. throw new \RuntimeException('no builder service found for this operation');
  35. }
  36. }