<?php
declare(strict_types=1);
namespace App\Infrastructure\Form\Security;
use App\Domain\Common\Entity\Machine;
use App\Domain\Common\Repository\CentreRepository;
use App\Domain\Common\Repository\MachineRepository;
use App\Domain\Security\DTO\SecurityDTO;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class LoginType extends AbstractType
{
private CentreRepository $centreRepository;
/**
* @var MachineRepository
*/
private MachineRepository $machineRepository;
public function __construct(
CentreRepository $centreRepository,
MachineRepository $machineRepository
)
{
$this->centreRepository = $centreRepository;
$this->machineRepository = $machineRepository;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username', TextType::class, [
'label' => 'Identifiant',
'required' => true,
'attr' => [
'placeholder' => 'Identifiant...'
],
])
->add('password', PasswordType::class, [
'label' => 'Mot de passe',
'required' => true,
'attr' => [
'placeholder' => 'Mot de passe...',
],
])
->add('centre', ChoiceType::class, [
'label' => 'Choix du centre',
'choices' => $this->centreRepository->findAll(),
'choice_value' => 'id',
'choice_label' => 'libelle',
'attr' => [
'class' => 'js-boxList-centre',
],
])
->add('machine', ChoiceType::class, [
'label' => 'Choix de la machine',
'choices' => $this->machineRepository->findAll(),
'required' => false,
'placeholder' => Machine::MACHINE_PLACEHOLDER,
'choice_value' => 'id',
'choice_label' => 'libelle',
'choice_attr' => fn(Machine $machine) => [
'data-centre' => $machine->getCentre()->getId(),
],
'attr' => [
'class' => 'js-boxList-machine'
],
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => SecurityDTO::class,
'label' => 'connexion à l\'application',
]);
}
}