Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][Symfony]Własna walidacja formularza
Forum PHP.pl > Forum > PHP > Frameworki
Lirdoner
Witam, posiadam rozbudowany formularz który powinien być walidowany zależnie od innych pól tego formularza.
Formularz ma dodane takie pola:
  1. $builder
  2. ->add('category', EntityType::class, array(
  3. 'label' => 'Kategoria',
  4. 'class' => 'AppBundle:Category',
  5. 'choice_label' => 'title'
  6. ))
  7. ->add('imageChoiceType', ChoiceType::class, array(
  8. 'label' => 'Typ grafiki',
  9. 'mapped' => false,
  10. 'choices' => array(
  11. 'Link do obrazka' => 1,
  12. 'Z dysku' => 0
  13. ),
  14. 'required' => false
  15. ))

Chciałbym aby jeżeli pole "category" ma wartość 2 to pole "imageChoiceType" aby było wymagane i miało wartości albo 0 albo 1.
Encja na której opiera się formularz nie ma właściwości $imageChoiceType. Pole to jest mi potrzebne tylko do walidacji dalszych pól.

Aktualna obsługa formularza to standardzik:
  1. $item = new Item();
  2.  
  3. $form = $this->createForm(newItemType::class, $item);
  4. $form->handleRequest($request);
  5.  
  6. if($form->isSubmitted() && $form->isValid()) {
  7.  
  8. }


Czytałem http://symfony.com/doc/current/reference/c...s/Callback.html jednak nie pomogło mi to ponieważ z poziomu encji nie mam dostępu do pola imageChoiceType (pole nie jest mapowane)
Jak to rozwiązać?
Kofel
Twój constraint powinien zostać założony na cały formularz, a nie tak jak to Ty próbujesz zrobić, na konkretne pole - to nie ma sensu.

Czyli w configureOptions:
  1. $resolver->setDefaults([
  2. 'constraints' => [
  3. new RequiredIfValue(['field' => 'category', 'fieldValue' => 2, 'requiredField' => 'imageChoiceType')
  4. ]
  5. ]);


RequiredIfValue oczywiście nie ma implementacji. To jest tylko proof of concept, aby Cię naprowadzić
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.