Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] Formularz z kolekcją ale trochę inaczej
JoShiMa
post
Post #1





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Otóż mam taki problem. Z bazy pobieram informację o pewnej grupie użytkowników. Będę te informacje wyświetlać w tabeli. W jednym z pół tabeli ma się znaleźć niewielki TextArea za pomocą którego (via AJAX) zostanie do bazy dopisany komentarz dotyczący wybranego użytkownika.

I teraz tak. Wymyśliłam sobie, że cała tabelka powinna być formularzem a te pola TextArea powinny być kolekcją. Tylko jak zrobić, żeby indeksy odpowiadały ID usera. Czyli jesli w tabelce mam userów o id 5,12 i 17 to chcę miec tam pola

  1. <textarea id="form_comment_5" name="form[comment][5]" ></textarea>
  2. <textarea id="form_comment_12" name="form[comment][12]"></textarea>
  3. <textarea id="form_comment_17" name="form[comment][17]"></textarea>


A może to bez sensu robić to za pomocą FormBuildera skoro i tak będzie obsłużone AJAX-em?

Ten post edytował JoShiMa 9.12.2017, 23:05:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Cytat
Wymyśliłam sobie, że cała tabelka powinna być formularzem a te pola TextArea powinny być kolekcją
- słabo, ponieważ formularze powinny jak najbardziej odpowiadać encjom. Im bardziej odejdziemy od struktury danych tym większe problemy w implementacji, formularze w symfony są zaprojektowane pod kątem współpracy z encjami.
Najprostsze rozwiązanie to dodanie formularza "UserForm" do wysyłanej do widoku kolekcji, np. tak:
  1. foreach($users as $userEntity){
  2. $userEntity->form = $this->createForm(UserForm::class, $userEntity);
  3. }

Potem wystarczy jedynie wyrenderować i jeśli mamy akcję do edycji usera via ajax to nie musimy już prawie nic robić poza podpięciem formularza do tej akcji.
Oczywiście trzeba wziąć pod uwagę takie rzeczy jak:
- csrf
- walidacja
- obsługa błędów
- edycja?
Jeśli dodanie formularza do każdego rekordu jest z jakiś powodów (np. wydajność) problematyczne, to można formularz wygenerować znów via ajax oddzielnie dla każdego rekordu.
Kolejna opcja to wygenerowanie formularza w JS na onclick bez żadnego requestu, jednak to wiąże się z dość dużym nakładem pracy i powoduje liczne problemy (np. z różnicami w renderowaniu pomiędzy PHP a JS).
I znów na ostatnim miejscu można to zrobić całkowicie ręcznie, jednak wtedy musimy implementować wszystko sami (np. walidację). Takie rozwiązanie polecałbym w ostateczności, bo często z jakiś powodów nie da się inaczej.
Go to the top of the page
+Quote Post

Posty w temacie


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: 13.10.2025 - 16:41