Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF][Symfony2] Walidacja formularza bez klasy z polami typu entity
DavidPL
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 27.04.2004
Skąd: Rzeszów

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


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?

Ten post edytował DavidPL 1.08.2015, 01:53:01
Go to the top of the page
+Quote Post
blahy
post
Post #2





Grupa: Zarejestrowani
Postów: 82
Pomógł: 22
Dołączył: 20.07.2010

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


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
Go to the top of the page
+Quote Post
DavidPL
post
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 27.04.2004
Skąd: Rzeszów

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


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?
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.12.2025 - 18:24