src/Form/ReservationType.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Reservation;
  4. use App\Entity\Service;
  5. use App\Form\Config\TypeConfigurationType;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  8. use Symfony\Component\Form\CallbackTransformer;
  9. use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
  10. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  11. use Symfony\Component\Form\Extension\Core\Type\TextType;
  12. use Symfony\Component\Form\FormBuilderInterface;
  13. use Symfony\Component\OptionsResolver\OptionsResolver;
  14. class ReservationType extends TypeConfigurationType
  15. {
  16.     /**
  17.      * @var EntityManagerInterface
  18.      */
  19.     private $entityManager;
  20.     private $services = [];
  21.     public function __construct(EntityManagerInterface $entityManager)
  22.     {
  23.         $this->entityManager $entityManager;
  24.     }
  25.     public function buildForm(FormBuilderInterface $builder, array $options)
  26.     {
  27.         $service $builder->getData()->getService();
  28.         $builder
  29.             ->add('firstname'TextType::class, [
  30.                 "required"=>true,
  31.                 "label"=>"Nom",
  32.                 "attr"=>[
  33.                     "class"=>"form-input"
  34.                 ]
  35.             ])
  36.             ->add('lastname'TextType::class, [
  37.                 "required"=>true,
  38.                 "label"=>"Prenom(s)",
  39.                 "attr"=>[
  40.                     "class"=>"form-input"
  41.                 ]
  42.             ])
  43.             ->add('telephone'TextType::class, [
  44.                 "required"=>true,
  45.                 "label"=>"No de Telephone",
  46.                 "attr"=>[
  47.                     "class"=>"form-input"
  48.                 ]
  49.             ])
  50.             ->add('email'TextType::class, [
  51.                 "required"=>true,
  52.                 "label"=>"Votre email",
  53.                 "attr"=>[
  54.                     "class"=>"form-input"
  55.                 ]
  56.             ])
  57.             ->add('service'EntityType::class, [
  58.                 'class' => Service::class,
  59.                 'choice_label' => 'name',
  60.                 'data' => $service,
  61.                 'placeholder' => 'Sélectionnez un service',
  62.                 'required' => true,
  63.                 "attr"=>[
  64.                     "class"=>"form-input"
  65.                 ],
  66.             ])
  67.             /*->add('name', EntityType::class, [
  68.                 'class' => Service::class,
  69.                 'required' => true,
  70.                 'choice_label' => 'service',
  71.                 'multiple' => false,
  72.                 "attr"=>[
  73.                     "class"=>"form-select form-control-sm"
  74.                 ]
  75.             ])*/
  76.             ->add('reserved_at'DateTimeType::class, [
  77.                 "required"=>true,
  78.                 'widget' => 'single_text',
  79.                 'attr' => [
  80.                     'class' => 'js-datetimepicker form-input',
  81.                     'placeholder' => 'Sélectionnez une date et une heure'
  82.                 ],
  83.                 'label' => 'Date et heure de réservation'
  84.             ])
  85.             ->add('observations'TextareaType::class, [
  86.                 "required"=>true,
  87.                 "label"=>"Observation",
  88.                 "attr"=>[
  89.                     "class"=>"form-input",
  90.                     "placeholder"=>"Dites-nous plus sur votre demande."
  91.                 ]
  92.             ]);
  93.             //dd($builder->get('reserved_at'));
  94.         $builder->get('reserved_at')
  95.             ->addModelTransformer(new CallbackTransformer(
  96.                 function ($eng_date) {
  97.                     if (null === $eng_date)
  98.                         return null;
  99.                     return $eng_date->format('d/m/Y H:i');
  100.                 },
  101.                 function ($fr_date) {
  102.                     if (null === $fr_date)
  103.                         return null;
  104.                     $date \DateTimeImmutable::createFromFormat('d/m/Y H:i''29/07/2024 12:50')->format('Y-m-d H:i:s');
  105.                     return new \DateTimeImmutable($date);
  106.                 }
  107.             ));
  108.     }
  109.     public function configureOptions(OptionsResolver $resolver)
  110.     {
  111.         $resolver->setDefaults([
  112.             'data_class' => Reservation::class,
  113.             'service' => null// Définir une option par défaut
  114.             'csrf_protection' => true,
  115.             'csrf_field_name' => '_token',
  116.             'csrf_token_id'   => 'reservation_item'
  117.         ]);
  118.         $resolver->setAllowedTypes('service', ['null'Service::class]);
  119.     }
  120. }