Robię stronę dla ogłoszeń. Reklama może być różnego rodzaju i dlatego ma różne dane. Na przykład pojazd będzie miał make
i model
jako dodatkowe dane.Dynamiczna forma (przełącznik podmiotu) symfony2
W tej chwili mam jedną podstawową jednostkę doktryny Advert
, która zawiera dane wymagane przez każde ogłoszenie. Poszczególne reklamy z kolei przekazują te dane (doctrine2 discriminatormap)
Muszę wypełnić formularz dynamicznie (za pomocą formularzy ajax i symfony2), jeśli użytkownik zdecyduje się utworzyć reklamę pojazdu Chcę wyświetlić opcje reklamy pojazdu. Ale muszę również zmienić jednostkę, aby miała postać AdvertVehicle
.
Czy to możliwe? Czytałem wpis cookbook na stronie Symfony2
„Jak dynamicznie modyfikować formularze formularz Zdarzenia”: To powinno być obsługiwane poprzez wywołanie AJAX z powrotem do aplikacji. W tym kontrolerze możesz przesłać formularz, ale zamiast go przetwarzać, po prostu użyj przesłanego formularza, aby renderować zaktualizowane pola. Odpowiedzi z połączenia AJAX można następnie użyć do aktualizacji widoku.
Rozumiem, jak wykonać wywołanie ajax z powrotem do mojego kontrolera, i rozumiem, jak używać formularza zdarzeń, ale jak uzyskać odpowiedź zrenderowanego select-box (zawierające modele pojazdów na przykład) ? Z nowym AbstractType? lub formbuilder?
A kiedy użytkownik faktycznie przesyła formularz, muszę użyć podmiotu wybranego typu ogłoszenia. Czy mogę zmienić obiekt zgodnie z wyborem użytkownika w formularzu dynamicznie?
Edytuj Sprawdziłem dziedziczenie formularza, które jest wspaniałe, dziękuję. Rozszerzam AdvertType
i zastępuję metodę buildForm()
i zanim dodaję elementy potrzebne do AdvertVehicleType
, nazywam metodę nadrzędną.
dodatkowych wojsk Wyjaśnienie Każde ogłoszenie jednostka zawiera price
, description
, title
i category
. Niektóre reklamy zawierają więcej, na przykład make
i model
. Są one zróżnicowane przez discriminatormap
(doctrine2)
Przykład:
// -- Entity
class CarAdvert extends Advert {
protected $model;
protected $make;
}
// -- Entity
// -- This uses discriminator mapping
class Advert {
protected $title;
protected $description;
protected $price;
protected $category;
}
jeśli użytkownik wybierze kategorię cars
chcę użyć podmiot CarAdvert
(dla walidacji i utrzymywanie się), jeśli użytkownik wybierze dom hold itemcategory Po prostu chcę użyć normalnej encji Advert
.
Jeden poważny problem jest nadal, że nie mogę dowiedzieć się, jak renderować rozszerzoną formę za pośrednictwem ajax. Wszelkie wskazówki na ten temat? Gdy użytkownik wybierze samochód jako kategorię, chcę, aby formularz został zaktualizowany (przez jQuery/ajax), ale jak utworzyć kontroler, który pobierze tylko rozszerzoną część formularza i odeśle html jako odpowiedź (bez użycia gałązki i renderowanie go w widoku, jest to możliwe?
Rozwiązanie:
Patrz odpowiedź poniżej!
Możesz używać dziedziczenia w swoich typach formularzy, unika się duplikowania kodu dla 2 podobnych formularzy Przykład: 'AdvertType' ma 2 pola. 'AdvertVehicleType' może rozszerzyć' AdvertType' w celu dodania 2 pól. Opowiedz nam więcej o swoich jednostkach, w jaki sposób są one zadeklarowane, jak rozróżniasz dwa typy 'Advert', itp. –
Każda aktualizacja tego pytania @Asbestos? Mam do czynienia z podobnym problemem, więc jestem zainteresowany możliwym rozwiązaniem lub doświadczeniem z tym problemem, itd. Dzięki! – acrobat
Mam nadzieję, że zaktualizowana odpowiedź jest wystarczająco dobra @acrobat nie wahaj się zostawić inny komentarz, jeśli potrzebujesz więcej informacji! – Asbestos