Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inny][Symfony2] Jeden do wielu - formularz - jak ?
Forum PHP.pl > Forum > PHP > Frameworki
spacja
Witam, jestem świerzak jeżeli chodzi o symfony. Chciałbym się zapytać jak zrobić dodawanie rekordów jednocześnie do dwóch tabel.
Otóż mam :

1. tabela "Kth" - entity Kth.php
2. tabela "Adresy" - entity Adresy.php

Tabele połączone ze sobą w relacji : Jeden do Wielu ( jeden kth może mieć wiele adresów).

Teraz chciałbym zrobić formularz, korzystają np. z jQuery.
1. wpisuję dane kontrahenta (firma, nip etc.)
2. dodaję N adresów (np. adres korespondencyjny/ siedziba / oddział etc. ) : N - liczba zmienna ( N >= 1)

Dodawanie nowego adresu chcę zrealizować przy pomocy np. button'a; po kliknięciu klonuje odpowiednie pola i wstawia do formy.


Korzystając z transakcji dodać te dane do bazy :
1. dodaj dane kth
dla N adresów ---
2. jeżeli dodano kth bez problemu, dodaj adres[N]

3. jeżeli dodano wszystko poprawnie - zapisz
4. jeżeli gdzie wystąpił błąd - rollback.

I teraz Panie i Panowie - jak to zrealizować ? W C# sprawa prosta, dodawałem sobie na kontrolkę np. 5 adresów, później w pętli zapisywałem każdy po kolei, jak coś poszło nie tak to wyświetlałem error i rollback z bazy i wsio. A tutaj mam spory problem z realizacją tego zagadnienia smile.gif
danio1021
Okej, a więc, transakcje w Doctrine (bo zakładam, że go używasz) opisane są bardzo ładnie tutaj: http://docs.doctrine-project.org/en/2.0.x/...oncurrency.html. Generalnie - nie musisz nic robić, Doctrine robi to za Ciebie, ale jeśli chcesz mieć nad tym większą kontrolę - tam znajdziesz rozwiązanie (Approach 2)
A to co starasz się zrobić, kiedyś znalazłem całkiem eleganckie rozwiązanie: http://toni.uebernickel.info/2012/03/15/an...-prototype.html smile.gif
thek
To nie jest eleganckie rozwiązanie, ale niestety Symfony2 w tym akurat wypadku (operacje na kolekcjach) ma dość kiepskie wsparcie, gdy ma to być w całości oparte o symfony'ową walidację formularzy. Wspomniane wyżej rozwiązanie jest oficjalnym w cookbooku, ale ja osobiście robię to nieco inaczej: albo tworzę elementy dynamicznie, albo mam ukryty blok, który jest klonowany i dołączany po drobnych modyfikacjach do struktury. Do tego najczęściej zdefiniowanie własnego FormType wraz z twigowym widgetem (jeśli całość jest na odpowiednim poziomie skomplikowania), a jeśli jeszcze ma to być reużywalne, to zamknięcie w serwis.
spacja
Ożesz.... no to widzę trochę nauki przede mną :/ Dzięki panowie za podsunięcie rozwiązania. Ale tak czy siak, nie ma jakiegoś prostszego rozwiązania ? thek - rzuciłbyś jakiś przykład ? Bo przyznam szczerze, że jeszcze nie dotarłem chociażby do tworzenia makr w twigu.
thek
Myslę, że te kilka wpisów w cookbooku nieco Ci sprawę przybliżą -> http://symfony.com/doc/2.0/cookbook/form/c...field_type.html Oczywiście to dość prosty przykład na custom form field/type, które można także zamknąć w service. Do tego najlepiej jeszcze machnąć własny theme/form_layout by pole walnąć w render. Przydaje się zwłaszcza gdy masz bardzo nietypowe kontrolki, typu jstree lub inne cuda wianki. Tu masz naprawdę podstawowe przybliżenie tematu http://symfony.com/doc/2.0/cookbook/form/f...tomization.html Zaznaczam jednak, żetworzenie własnych i kombinowanie w Twigu jest mocno nieudokumentowane i wiele rzeczy innych niż podstawowe jest kiepsko opisane. Najlepsze rozwiązanie to... analiza kodu niestety. Sam już niejeden bluzg posłałem gdy coś miałem w Twigu niestandardowego zrobić smile.gif
danio1021
Fakt, bluzgi często towarzyszą pracy z tym frameworkiem na początku, ale jak się nie poddasz to już o wiele łatwiej jest później ;D
spacja
Dzięki panowie za pomoc, tak czy siak muszę się pouczyć więc dojdzie nowy materiał do kolejki. Odnośnie bluzgów - to ostatnio towarzyszą mi po każdym włączeniu IDE - zawsze myślałem, że framework ma ułatwiać i przyśpieszać pracę, ale na razie wydłuża i komplikuje ją niemiłosiernie :/
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.