![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Jak zwalidować w akcji kontrolera dane wyslane z formularza utworzonego manualnie ? Moj formularz w TWIG:
Kontroler:
Normalnie robi sie to tak :
ale u siebie mnie nie tworze forma w kontrolerze. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 182 Pomógł: 9 Dołączył: 30.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
jeżeli chcesz zwalidować dane, to uzyj po prostu walidatora na wynikowym (przesłanym) obiekcie. walidator to osobny komponent symfony i może działać bez formularza. musiałbyś jednak dorobić i powielić sporo istniejącej już funkcjonalności m.in. do spopulowania obiektu danymi wejściowymi. Osobiście dla kazdych danych wejściowych (nie ważne, czy pochodzących od uzytkownika, czy automatycznego klienta) staram się tworzyć formularz - czytaj to jako funkcjonalność, a nie rezultat wizualny (formularz można, ale nie trzeba wyrenderować "do widoku"). na Twoim miejscu więc wysiliłbym się i stworzył klase formularza, nawet jeżeli jego pola sa tworzone dynamicznie, to z pewnościa jest jakiś algorytm jego tworzenia
![]() ![]() Ten post edytował uirapuru 25.03.2016, 09:16:19 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
ehh ... no to mnie zmartwiłeś
![]() Chciałem to zrobić jak "biały człowiek" jednak miałem problem z uzyskaniem tego co potrzebowałem zrobić, a wiec: - pobrać dane w RepositoryClass - wyswietlić je w Twig - dodać do tych danych pola do wypełnienia - zapisać dane z wypełnionych pol w bazie Ten post edytował damianooo 25.03.2016, 09:36:26 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 182 Pomógł: 9 Dołączył: 30.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
do tego co mi sie wydaje, potrzebujesz połączyć dwie rzeczy: embedded collection oraz dynamical forms. pierwsze pozwoli Ci stworzyć podformularze dla każdej encji z kolekcji (u Ciebie chyba matches), a eventy do dynamicznego tworzenia pól jeżeli masz tam odrobinę więcej logiki potrzebnej
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
ok chyba nie bede mial wyjscia i powinienem to zrobic jak "bialy czlowiek" ... i rozumiem ze najlepiej zawsze isc ta droga w Symfony ....
Podpowiedz mi tylko czy powinienem tego forma i embeded collection robic dla encji Type czy Match ? PS. Encja Type to ta ktorej dane bede dodawal do bazy, natomiast encja Match to ta, ktorej dane chce tylko wyswietlic w Twigu i nic wiecej z nimi nie robic. W takiej relacji jest encja Type z encja Match:
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Przepraszam że się wpie... między wódkę a zakonskę ale zawsze mnie mnie dziwi dlaczego w Symfony/Zend to musi być takie skomplikowane. Każda pierdoła która powinna być zrobiona na maksa prosto bez udziwnień musi być zrealizowana przy pomocy pierdylardu klas, metod, tricków, hacków
![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 182 Pomógł: 9 Dołączył: 30.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
to nie jest kwestia symfony, tylko zasad dobrego programowania. spaghetti możesz tworzyć w kazdym fw, w symfony również
![]() @damianooo: stwórz formularz osobiście do sprawy podchodze tak, że: - moje encje nie maja setterów, parametry podaję do konstruktora tylko przy utworzeniu, wymusza to tworzenie metod z logiką, które sprawiają, że encja nie jest "anemiczna" - tworzę sobie klase formularza opartą o klasę DTO - tworzę sobie prostą klasę DTO, którą wpinam w formularz; zawiera ona publiczne pola np. kolekcje itd (wiem, ze DTO nie powinno zawierac encji, tylko id's ale w moich przypadkach jest to pomijalne - nie serializuję dto i nie pcham po api) - tworzę serwis implementujący konkretną ścieżkę działania (przypadek użycia), zapodaje jej wszystkie potrzebne zależności i w jego metodzie handle zawieram logikę - utworzenie, obrobienie i zapis do bazy. oczywiście TDD, więc mam od razu otestowany kod; na koniec działania rzucam event, że działanie wykonane lub exception - tworzę sobie factory dla encji (jedna dla match i druga dla type), dzięki temu mam w systemie jedno centralne miejsce, gdzie encje są tworzone i nigdzie indziej nie ma czegoś takiego jak new Match itp; robie w niej metodę createEntityFromCommand, która DTO konwertuje do encji - w kontrolerze: tworzę formularz, wciskam w niego DTO, populuje DTO requestem, robię walidację DTO a nie encji (trzymam jej zasady w validation.yml), jesli valid to na utworzonym serwisie robię po prostu ->handle($command), przekazuje formularz do widoku i np. ustawiam flash dla usera. voila. wszystko odizolowane i otestowane, a ten sam kod moge wykorzystać na stronie, w api czy commandzie bez różnicy.
Jak chcesz sobie podejrzeć, to mam taką tu małą appkę, nie zastosowałem wydzielenia klas domeny i aplikacji ani TDD ze względu na wielkość, ale to chyba identyczny przypadek jak Twoj - formularz z jedną kolekcją https://github.com/uirapuru/evento/tree/master/src/AppBundle Ten post edytował uirapuru 25.03.2016, 10:32:30 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
to co piszesz to troche wyzsza szkola jazdy wiec pewnie tym razem niestety nie skorzystam bo niestety nie umiem jeszcze tyle ...
bede chcial jednak to zrobic oczywiscie tak jak zasugerowales a wiec z wykorzystniem standardowego formularza ... i na pewno uproscic jak sie da ... mam nadzieje ze w moim problemie, ktory mam do rozwiazania to mi sie uda ... podziałam i podziele sie rozwiazaniem tutaj na forum ... |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 182 Pomógł: 9 Dołączył: 30.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
nie mam ambicji bycia nauczycielem, ale myślę, że kazdy moment na naukę dobry, tymbardziej, że jeśli dobrze rozumiem dałem Ci przykład ze swojego kodu 1:1 z Twoim przypadkiem
![]() |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
hmm ... mowisz ze mamy podobienstwo 1:1 ... moze ... nie widze tego na razie
Zrobilem tak w kontrolerze:
Formularz encji Type:
niestety potrzebuje jeszcze pobrac dane z encji Match z Repository class:
nie wiem jak to wszystko powiazac ... |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.06.2025 - 13:06 |