Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony][SF2][Symfony2] Walidacja dynamicznie generowanych formularzy
seeba
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 28.01.2010

Ostrzeżenie: (0%)
-----


[php][/php]Cześć,

utworzyłem formularz korzystając zHow to Dynamically ...

Formularz :
Kod
<?php
/

class EventType extends AbstractType
{
    private $permissions;
    public function __construct($permissions = false)
    {
        $this->permissions = $permissions;
    }
  
    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $builder
            ->add(
                'plannedStartDate',
                'date',
                array(
                    'html5' => false,
                    'placeholder' => array('year' => 'Year', 'month' => 'Month', 'day' => 'Day'),
                    'widget' => 'single_text',
                    'format' => 'dd/MM/yyyy',
                    'required' => true,
                    'label' => '',
                    'label_attr' => array(
                        'class' => 'col-sm-3 control-label'
                    ),
                    'attr' => array(
                        'class' => 'form-control'
                    )
                )
            )
            ->add(
                'plannedStartTime',
                'time',
                array(
                    'html5' => false,
                    'widget' => 'single_text',
                    'read_only' => true,
                    'required' => true,
                    'label' => '',
                    'label_attr' => array(
                        'class' => 'col-sm-3 control-label'
                    ),
                    'attr' => array(
                        'class' => 'form-control'
                    )
                )
            )
            ->add(

                'plannedEndTime',
                'time',
                array(
                    'html5' => false,
                    'widget' => 'single_text',
                    'read_only' => true,
                    'placeholder' => 'Godzina zakończenia',
                    'required' => true,
                    'label' => '',
                    'label_attr' => array(
                        'class' => 'col-sm-3 control-label'
                    ),
                    'attr' => array(
                        'class' => 'form-control'
                    )
                )
            )
            ->add(
                'typeOfEvent',
                'entity',
                array(

                    'class' =>'AppBundle:TypeOfEvent',
                    'placeholder' => 'Wybierz typ wizyty',
                    'required' => true,
                    'label' => 'Typ wizyty',
                    'label_attr' => array(
                        'class' => 'col-sm-3 control-label'
                    ),
                    'attr' => array(
                        'class' => 'form-control'
                    )
                )
            )
            ->add('contractor', 'entity', array(

                'placeholder' => 'Wybierz',
                'class' => 'AppBundle:Contractor',
                'label' => 'Kontrahent',
                'label_attr' => array(
                    'class' => 'col-sm-3 control-label'
                ),
                'attr' => array(
                    'class' => 'form-control'
                )
            ))
            ->add('contactPersonTelephone', 'text', array(

                
            ))
          
            ->add('submit', 'submit', array(
                'label' => 'Zapisz',
                'attr' => array(
                    'class' => 'btn btn-default button_green'
                )
            ))
//            
       ;


        $formCyclicModifier = function (FormInterface $form, TypeOfEvent $typeOfEvent = null) {

                    if ($typeOfEvent) {
                        if ($typeOfEvent->getIsCyclic() == true){


                            $form->add(
                                'cyclic',
                                'entity',
                                array(
                                    'class' => 'AppBundle:Cyclic',
                                  
                                )
                            );
                        }
                    } else {}

        };

        $formModifier = function (FormInterface $form, Contractor $contractor = null) {


            $contactPersons = null === $contractor ? array() : $contractor->getContactPersons();

            $rooms = null === $contractor ? array() : $contractor->getRoom();

            $form->add(
                'contactPerson',
                'entity',
                array(

                    'class' => 'AppBundle:ContactPerson',
                    'placeholder' => 'Wybierz użytkownika',
                    'choices' => $contactPersons,
                
                )
            );

            $form->add(
                'room',
                'entity',
                array(

                    'class' => 'AppBundle:Room',
                    'placeholder' => 'Wybierz pomieszczenie',
                    'choices' => $rooms,
                
                )
            );


        };

        $builder->addEventListener(
            FormEvents::PRE_SET_DATA,
            function (FormEvent $event) use ($formModifier) {
                $data = $event->getData();

                $formModifier($event->getForm(), $data->getContractor());
            }
        );
        $builder->addEventListener(
            FormEvents::PRE_SET_DATA,
            function (FormEvent $event) use ($formCyclicModifier) {
                $data = $event->getData();

                $formCyclicModifier($event->getForm(), $data->getTypeOfEvent());

            }
        );

        $builder->get('contractor')->addEventListener(
            FormEvents::POST_SUBMIT,
            function(FormEvent $event) use ($formModifier){
                $contractor = $event->getForm()->getData();
                $formModifier($event->getForm()->getParent(), $contractor);

            }
        );
        $builder->get('typeOfEvent')->addEventListener(
            FormEvents::POST_SUBMIT,
            function(FormEvent $event) use ($formCyclicModifier){
                $typeOfEvent = $event->getForm()->getData();
                $formCyclicModifier($event->getForm()->getParent(), $typeOfEvent);

            }
        );
    }



Korzystając z ajaxa podmieniam dane dla list wyboru w zależności od wybranego kontrahenta. I pięknie to działa.

Problem w tym, ze jak chcę przeprowadzić walidację np czasu w polach 'plannedStartTime', 'plannedEndTime', to pobieranie danych do list przestaje działać. Gdy nic nie waliduję działa poprawnie.

Jak dopisać walidację do tego formularza by nie zakłócała ajaxowego podmieniania części tego formularza?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 12:31