src/Form/Choice/ClinicalManagerChoiceType.php line 49

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form\Choice;
  4. use App\Entity\ClinicalManager\ClinicalManager;
  5. use App\Repository\ClinicalManagerRepository;
  6. use Symfony\Bridge\Doctrine\Form\DataTransformer\CollectionToArrayTransformer;
  7. use Symfony\Component\Form\AbstractType;
  8. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  9. use Symfony\Component\Form\FormBuilderInterface;
  10. use Symfony\Component\OptionsResolver\Options;
  11. use Symfony\Component\OptionsResolver\OptionsResolver;
  12. use function is_array;
  13. use function is_bool;
  14. use function is_int;
  15. use function sprintf;
  16. class ClinicalManagerChoiceType extends AbstractType
  17. {
  18.     public function __construct(private readonly ClinicalManagerRepository $clinicalManagerRepository)
  19.     {
  20.     }
  21.     public function buildForm(FormBuilderInterface $builder, array $options): void
  22.     {
  23.         if (is_bool($options['multiple']) && ! $options['multiple']) {
  24.             return;
  25.         }
  26.         $builder->addModelTransformer(new CollectionToArrayTransformer());
  27.     }
  28.     public function configureOptions(OptionsResolver $resolver): void
  29.     {
  30.         $resolver->setDefaults([
  31.             'choices' => function (Options $options): array {
  32.                 if (is_array($options['attr']) && isset($options['attr']['clinical_manager_id']) && is_int($options['attr']['clinical_manager_id'])) {
  33.                     $clinicalManagerId $options['attr']['clinical_manager_id'];
  34.                 } else {
  35.                     $clinicalManagerId null;
  36.                 }
  37.                 return $clinicalManagerId !== null $this->clinicalManagerRepository->findAllNotArchivedExcept($clinicalManagerId) : $this->clinicalManagerRepository->findAllNotArchived();
  38.             },
  39.             'choice_value' => 'customer.email',
  40.             'choice_label' => static fn (ClinicalManager $clinicalManager): string => sprintf('%s (%s)'$clinicalManager->getCustomer()->getFullName(), $clinicalManager->getCustomer()->getEmail()),
  41.             'choice_translation_domain' => false,
  42.         ]);
  43.     }
  44.     public function getParent(): string
  45.     {
  46.         return ChoiceType::class;
  47.     }
  48.     public function getBlockPrefix(): string
  49.     {
  50.         return 'app_clinical_manager_choice_type';
  51.     }
  52. }