src/Form/Technic/TechnicFormType.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Form\Technic;
  3. use App\Entity\Technic;
  4. use App\Entity\User\User;
  5. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  6. use Symfony\Component\Form\AbstractType;
  7. use Symfony\Component\Form\Extension\Core\Type\ButtonType;
  8. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  9. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  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. use Symfony\Component\Validator\Constraints\Length;
  15. use Symfony\Component\Validator\Constraints\NotNull;
  16. class TechnicFormType extends AbstractType
  17. {
  18.     public function buildForm(FormBuilderInterface $builder, array $options): void
  19.     {
  20.         $labelAttr = [
  21.             'class' => 'text-gray-700 dark:text-gray-400'
  22.         ];
  23.         $inputAttrCollection = [
  24.             'text' => [
  25.                 'class' => 'block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-textarea focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray'
  26.             ],
  27.             'choice' => [
  28.                 'class' => 'block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-select focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray'
  29.             ],
  30.             'button' => [
  31.                 'delete' => [
  32.                     'class' => 'buttonDelete block w-full py-3 font-medium leading-5 text-white transition-colors duration-150 bg-red-600 border border-transparent rounded-lg active:bg-red-600 hover:bg-red-700 focus:outline-none focus:shadow-outline-red'
  33.                 ],
  34.                 'back' => [
  35.                     'class' => 'buttonBack block w-full py-3 font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple'
  36.                 ],
  37.                 'edit' => [
  38.                     'class' => 'buttonEdit block w-full py-3 font-medium leading-5 text-white transition-colors duration-150 bg-green-600 border border-transparent rounded-lg active:bg-green-600 hover:bg-green-700 focus:outline-none focus:shadow-outline-green'
  39.                 ],
  40.                 'save' => [
  41.                     'class' => 'block w-full py-3 font-medium leading-5 text-white transition-colors duration-150 bg-green-600 border border-transparent rounded-lg active:bg-green-600 hover:bg-green-700 focus:outline-none focus:shadow-outline-green'
  42.                 ],
  43.                 'cancel' => [
  44.                     'class' => 'block w-full py-3 font-medium leading-5 text-white transition-colors duration-150 bg-red-600 border border-transparent rounded-lg active:bg-red-600 hover:bg-red-700 focus:outline-none focus:shadow-outline-red',
  45.                     '@click' => "openModal"
  46.                 ]
  47.             ]
  48.         ];
  49.         $disabled $options['formStatus'] === 'view' true false;
  50.         $builder
  51.             ->add('personalNumber'TextType::class, [
  52.                 'disabled' => $disabled,
  53.                 'attr' => $inputAttrCollection['text'],
  54.                 'label' => 'form.technic.personalNumber.label',
  55.                 'label_attr' => $labelAttr,
  56.                 'constraints' => [
  57.                     new Length([
  58.                         'max' => 25,
  59.                     ]),
  60.                 ],
  61.             ])
  62.             ->add('brand'TextType::class, [
  63.                 'disabled' => $disabled,
  64.                 'attr' => $inputAttrCollection['text'],
  65.                 'label' => 'form.technic.brand.label',
  66.                 'label_attr' => $labelAttr,
  67.                 'constraints' => [
  68.                     new Length([
  69.                         'max' => 255,
  70.                     ]),
  71.                 ],
  72.             ])
  73.             ->add('model'TextType::class, [
  74.                 'disabled' => $disabled,
  75.                 'attr' => $inputAttrCollection['text'],
  76.                 'label' => 'form.technic.model.label',
  77.                 'label_attr' => $labelAttr,
  78.                 'constraints' => [
  79.                     new Length([
  80.                         'max' => 255,
  81.                     ]),
  82.                 ],
  83.             ])
  84.             ->add('params'TextareaType::class, [
  85.                 'disabled' => $disabled,
  86.                 'attr' => $inputAttrCollection['text'],
  87.                 'label' => 'form.technic.params.label',
  88.                 'label_attr' => $labelAttr,
  89.                 'constraints' => [
  90.                     new Length([
  91.                         'max' => 2048,
  92.                     ]),
  93.                 ],
  94.             ])
  95.             ->add('type'ChoiceType::class, [
  96.                 'disabled' => $disabled,
  97.                 'attr' => $inputAttrCollection['choice'],
  98.                 'choices' => [
  99.                     array_flipTechnic::TYPES)
  100.                 ],
  101.                 'constraints' => [
  102.                     new NotNull(),
  103.                 ],
  104.                 'label' => 'form.technic.type.label',
  105.                 'label_attr' => $labelAttr
  106.             ])
  107.             ->add('position'ChoiceType::class, [
  108.                 'disabled' => $disabled,
  109.                 'attr' => $inputAttrCollection['choice'],
  110.                 'choices' => [
  111.                     array_flipTechnic::DEPARTMENTS)
  112.                 ],
  113.                 'label' => 'form.technic.position.label',
  114.                 'label_attr' => $labelAttr
  115.             ])
  116.             ->add('user'EntityType::class, [
  117.                 'disabled' => $disabled,
  118.                 'class' => User::class,
  119.                 'choice_label' => function(?User $user) {
  120.                     return sprintf('%s %s'$user->getLastname(), $user->getFirstname());
  121.                 },
  122.                 'attr' => $inputAttrCollection['choice'],
  123.                 'label' => 'form.technic.user.label',
  124.                 'label_attr' => $labelAttr,
  125.             ])
  126.             ->add('networkName'TextType::class, [
  127.                 'disabled' => $disabled,
  128.                 'attr' => $inputAttrCollection['text'],
  129.                 'label' => 'form.technic.networkName.label',
  130.                 'label_attr' => $labelAttr,
  131.                 'constraints' => [
  132.                     new Length([
  133.                         'max' => 50,
  134.                     ]),
  135.                 ],
  136.             ])
  137.             ->add('status'ChoiceType::class, [
  138.                 'disabled' => $disabled,
  139.                 'attr' => $inputAttrCollection['choice'],
  140.                 'choices' => [
  141.                     array_flipTechnic::STATUSES)
  142.                 ],
  143.                 'constraints' => [
  144.                     new NotNull(),
  145.                 ],
  146.                 'label' => 'form.technic.status.label',
  147.                 'label_attr' => $labelAttr
  148.             ])
  149.             ->add('comment'TextareaType::class, [
  150.                 'disabled' => $disabled,
  151.                 'attr' => $inputAttrCollection['text'],
  152.                 'label' => 'form.technic.comment.label',
  153.                 'label_attr' => $labelAttr,
  154.                 'constraints' => [
  155.                     new Length([
  156.                         'max' => 2048,
  157.                     ]),
  158.                 ],
  159.             ]);
  160.             if ($options['formStatus'] === 'view') {
  161.                 $builder
  162.                     ->add('edit'ButtonType::class, [
  163.                         'attr' => $inputAttrCollection['button']['edit'],
  164.                         'label' => 'form.technic.button.edit.label'
  165.                     ])
  166.                     ->add('delete'ButtonType::class, [
  167.                         'attr' => $inputAttrCollection['button']['delete'],
  168.                         'label' => 'form.technic.button.delete.label'
  169.                     ])
  170.                     ->add('back'ButtonType::class, [
  171.                         'attr' => $inputAttrCollection['button']['back'],
  172.                         'label' => 'form.technic.button.back.label'
  173.                     ])
  174.                 ;
  175.             }
  176.             else {
  177.                 $builder
  178.                     ->add('save'SubmitType::class, [
  179.                         'attr' => $inputAttrCollection['button']['save'],
  180.                         'label' => 'form.technic.button.save.label'
  181.                     ])
  182.                     ->add('cancel'ButtonType::class, [
  183.                         'attr' => $inputAttrCollection['button']['cancel'],
  184.                         'label' => 'form.technic.button.cancel.label'
  185.                     ])
  186.                 ;
  187.             }
  188.     }
  189.     public function configureOptions(OptionsResolver $resolver)
  190.     {
  191.         $resolver->setDefaults([
  192.             'data_class' => Technic::class,
  193.             'formStatus' => null
  194.         ]);
  195.     }
  196. }