Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][Symfony2] Walidacja formularza bez klasy z polami typu entity
Forum PHP.pl > Forum > PHP > Frameworki
DavidPL
Natknąłem się na następujący problem i nie wiem jak sobie z nim poradzić...
Mam formularz który nie jest powiązany z entity... Formularz zawiera pola proste (tekst, data) oraz pola wyboru książki powiązane z entity.

  1. $builder
  2. ->add('id', 'integer', array('label' => 'Nr rezerwacji', 'required' => false))
  3. ->add('name', 'text', array('label' => 'Imię i nazwisko', 'required' => false))
  4. ->add('book', 'entity', array('label' => 'Książka', 'required' => false, 'class' => 'AppBundle:Book', 'choices' => $this->getOrderedBooks()));


Jako parametr choices wchodzi tablica elementów AppBundle:Book.
Formularz ten nie posiada zdefiniowanych walidatorów, natomiast AppBundle:Book posiada walidatory np takiej jak wymagany autor książki czy tytuł.

Teraz problem polega na tym, że podczas walidacji takiego formularza w kontrolerze przez $form->isValid() dostaję informację o błędzie, że np pole autor dla AppBundle:Book jest wymagane.
W jaki sposób można wyłączyć kaskadową walidację dla tego pola?
blahy
1. jesli ksiazka musi miec autora (ma taki walidator) to dlaczego wybrana ksiazka go nie ma? Inaczej, czy w bazie wszystkie ksiazki maja autora?
2. nie widac opcji wiec nie wiem czy masz ustawione cascade_validation, mozesz ustawic cascade_validation na false jesli nie masz innych embedowanych formow, ktore chcesz walidowac
3. uzyc grup walidacji (validation groups) i walidowac tylko to co rzeczywiscie chcesz
4. utworzyc jednak klase ktorej dane reprezentuje ten formularz (z polami id, name i kolekcja ksiazek) i przekazywac jej obiekt do formularza. Wtedy na polu books mozna dac @Assert\Valid() albo go nie dawac (jesli go nie bedzie to elementy w kolekcji nie beda walidowane). Obiekt ten waro miec, bo i tak jesli formularz bedzie poprawny to bedziesz cos z tymi danymi robil, wcale nie musi to byc encja mapowana do bazy danych przez doctrine
DavidPL
Wszystkie książki w bazie mają autora (jak i pozostałe potrzebne rzeczy).
Rzecz w tym, że ja tam nie chcę nic robić z encją książki - chcę jedynie aby ktoś wybrał jedną z książek z listy (stąd typ pola entity), dlatego też zaskoczyło mnie to, że formularz chce walidować encję książki pomimo iż nie oczekuje tego on niego.
Gdybym przy okazji walidacji formularza który przedstawiłem chciał walidować encję książki to ustawiłbym dla pola walidator typu Valid.
Formularz nie ma w ugóle ostawionej opcji cascade_validation (zresztą domyślnie jest chyba false o ile mi wiadomo) ale czy to w ogóle ma znaczenie jeśli formularz nie ma zagnieżdżonych innych formularzy?
Czy to jest normalne zachowanie? A może to ja po prostu nie zrozumiałem idei pola typu entity?
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.