src/Form/Choice/AdminUserChoiceType.php line 41

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form\Choice;
  4. use App\Entity\User\AdminUser;
  5. use App\Repository\AdminUserRepository;
  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_string;
  15. use function sprintf;
  16. class AdminUserChoiceType extends AbstractType
  17. {
  18.     public function __construct(private readonly AdminUserRepository $adminUserRepository)
  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' => fn (Options $options): array => is_array($options['attr']) && is_string($options['attr']['role']) ? $this->adminUserRepository->findByRoleResourceCodes([$options['attr']['role']], false) : [],
  32.             'choice_value' => 'email',
  33.             'choice_label' => static fn (AdminUser $adminUser): string => sprintf('%s (%s)'$adminUser->getFullName(), $adminUser->getEmail()),
  34.             'choice_translation_domain' => false,
  35.         ]);
  36.     }
  37.     public function getParent(): string
  38.     {
  39.         return ChoiceType::class;
  40.     }
  41.     public function getBlockPrefix(): string
  42.     {
  43.         return 'app_admin_user_choice_type';
  44.     }
  45. }