src/EasyAdmin/Controller/AccessUserCrudController.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\EasyAdmin\Controller;
  3. use App\Entity\AccessControl\AccessUser;
  4. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
  5. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
  6. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
  7. use EasyCorp\Bundle\EasyAdminBundle\Field\ArrayField;
  8. use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
  9. use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
  10. use EasyCorp\Bundle\EasyAdminBundle\Field\EmailField;
  11. use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
  12. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  15. class AccessUserCrudController extends AbstractCrudController implements EventSubscriberInterface
  16. {
  17.     private $passwordEncoder;
  18.     public function __construct(UserPasswordEncoderInterface $passwordEncoder)
  19.     {
  20.         $this->passwordEncoder $passwordEncoder;
  21.     }
  22.     public static function getSubscribedEvents(): array
  23.     {
  24.         return [
  25.             BeforeEntityPersistedEvent::class => 'hashPassword',
  26.             BeforeEntityUpdatedEvent::class => 'hashPassword',
  27.         ];
  28.     }
  29.     public function hashPassword($event): void
  30.     {
  31.         $entity $event->getEntityInstance();
  32.         if (!$entity instanceof AccessUser) {
  33.             return;
  34.         }
  35.         if(empty($entity->getUsername())) {
  36.             $entity->setUsername($entity->getEmail());
  37.         }
  38.         if (!empty($entity->plainPassword)) {
  39.             $hashedPassword $this->passwordEncoder->encodePassword($entity$entity->plainPassword);
  40.             $entity->setPassword($hashedPassword);
  41.         }
  42.     }
  43.     public static function getEntityFqcn(): string
  44.     {
  45.         return AccessUser::class;
  46.     }
  47.     public function configureFields(string $pageName): iterable
  48.     {
  49.         return [
  50.             ChoiceField::new('roles''Rôles')
  51.                 ->setChoices([
  52.                     'Super Administrateur' => 'ROLE_SUPER_ADMIN',
  53.                     'Partenaire de rédaction' => 'ROLE_CONTENT_WRITER',
  54.                 ])
  55.                 ->allowMultipleChoices()
  56.                 ->onlyOnForms(),
  57.             TextField::new('name''Prénom')->setColumns(6),
  58.             TextField::new('lastname''Nom')->setColumns(6),
  59.             EmailField::new('email''Email')->setColumns(6),
  60.             TextField::new('plainPassword''Mot de passe')
  61.                 ->setFormTypeOption('attr', ['type' => 'password'])
  62.                 ->setRequired(false)
  63.                 ->setHelp('Le mot de passe sera encodé automatiquement.')->onlyOnForms()->setColumns(6),
  64.         ];
  65.     }
  66. }