Symfony walidacja i empty value

0

Witam mam następujący problem.

Stworzyłem dość prosty formularz z kilkoma polami tj, nazwa, opis, nagłówek, data, treść itp. żadne z tych pól nie może pozostać puste. Mam również pole typu ChoiceType (prosty select), który z pomocą jQuery usuwa część formularza (tworzę różne typy wpisów, które różnią się między sobą polami - nieznacznie, usuwane są dwa niepotrzebne pola). W przypadku w którym wszystkie pola są wykorzystywane jest ok, jednak kiedy usuwam js'owo dwa pola, przy walidacji dostaje komunikat że te konkretne pola są puste.

Próbowałem nadpisać dane formularza po jego wysłaniu a przed jego walidacją jednak dostaje komunikat o błędzie: "You cannot change the data of a submitted form.".

Jak to ugryźć? Będę wdzięczny za każdą pomoc ;)

Oto mój kontroler:

 
    /**
     * Creates a new sites entity.
     *
     * @Route("/new", name="myapp_admin_sites_new")
     * @Method({"GET", "POST"})
     * @Template
     */
    public function newAction(Request $request)
    {       

        $sites = new Sites();
        
        $form = $this->createForm(SitesType::class, $sites);
        $form->handleRequest($request);
        
        if ($form->get('clear')->isClicked()) {
            unset($sites);
            $sites = new Sites();
            $form = $this->createForm(SitesType::class, $sites);
        }
        
        if((int)$form->get('parent')->getData() == 9999){    
            $form->get('title')->setData('empty');
            $form->get('description')->setData('empty');
        }
        
        if ($form->isSubmitted() && $form->isValid()) {

            $em = $this->getDoctrine()->getManager();
            $maxOrder = $em->getRepository('myappAdminBundle:Sites')->findMaxOrder();
                
            $sites->setOrd($maxOrder);
            $em->persist($sites);
            $em->flush();

            return $this->redirectToRoute('myapp_admin_sites_index', array('current' => $sites->getId()));
            
        } else if ($form->isSubmitted()){
            $this->get('session')->getFlashBag()->add('error', 'Błąd walidacji formularza. Popraw poniższe błędy.');
        }

        return array(
            'sites' => $sites,
            'form' => $form->createView(),
            'hide' => ((int)$form->get('parent')->getData() == 9999) ? true : false
        );
    }
0

Może napisać if'a/funkcję że waliduje konkretne pola formularza, czyli powiedzmy jeśli wybierasz opcję nr3 z inputa to waliduje tylko pierwsze i trzecie pole

0

Jak to zrobić w Symfony3?

0

I jak, ktoś pomoże? ;)

0

Poprawny sposób wykonania takiego formularza to stworzenie grup walidacji. W dokumentacji Symfony wszystko jest opisane: http://symfony.com/doc/current/form/data_based_validation.html

Przypisanie grupy do walidatora w encji:

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255, nullable=true)
     * @Assert\NotBlank(groups={"nazwa_grupy"})
     */
    private $zmienna;

1 użytkowników online, w tym zalogowanych: 0, gości: 1