Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][SF2][sf3] Formularz z dwoch entity
Forum PHP.pl > Forum > PHP > Frameworki
nospor
Hejka, mam dwie entity w relacji OneToOne i chcialem stworzyc forma, ktory za jednym zamachem zapisze mi obie entity.
Z kazda oddzielnie nie ma problemow, tworze EnityType dla kazdej z nich, w niej definiuje pola i wszystko smiga ladnie. Ale chce w Entity2 zawrzec rowniez pola z Entity1

Myslalem ze to sie nada i konstrukcja ala

  1. $builder = $this->createFormBuilder($article);
  2. $builder
  3. ->add('title', TextType::class)
  4. ->add(
  5. $builder->create('author', FormType::class, array('by_reference' => ?))
  6. ->add('name', TextType::class)
  7. ->add('email', EmailType::class)
  8. )

No i niby formularz sie wyswietla ladnie, tak jak chcialem, ale gdy przechodzimy do zapisu to dostaje blad:

Cytat
Expected argument of type "SomeBundle\Entity\Entity1", "array" given

Wiem co ten blad oznacza, znaczy ze on dla Entity2 dla pola bedacego Entity1 probuje przypisac tablice reprezentujaca Entity1 zamiast obiekt powstaly z tej tablicy.
Idzie to jakosc rozwiazac czy musze to robic zupelnie inaczej?
Crash89
Spróbuj w ten sposób.
Stworzy pola formularza dla całego entity które chcesz dodać do formularza.

  1. ->add('entity', EntityType::class)



nospor
Tworzac pole typu EntityType jako pole otrzymuje select z wyborem entity jaka chce przypisac do tego forma. A ja nie chce select, tylko chce subforma, gdzie moge wypelnic wszystkie pola tej subEntity

edit: dobra, chyba kumam, zbyt doslowonie potraktowalem twoje EntityType biggrin.gif
Crash89
Nie miałem tutaj na myśli entity, Weź sobie tam wpisz prawdziwą nazwę entity którą chcesz wykorzystać np. Entity2Type::Class.
Jako ten parametr dodajesz FormType np. AddressType::class.
nospor
Ok, dzieki, wszystko hula smile.gif
Crash89
Być może będziesz musiał te dane pobrać ręcznie z requesta i utworzyć ręcznie ten obiekt i go dodać do bazy, jeszcze tego nie robiłem w symfony.
nospor
Problemem bylo ze przy insert musialem recznie stworzyc pusta subEntity i na niej zrobic persist() przed flush. Dla edycji juz tego nie trzeba bylo robic
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.