Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][Symfony2]Dynamiczne generowanie formularza.
Forum PHP.pl > Forum > PHP > Frameworki
Skwareknec
Witam serdecznie. Od pewnego czasu tworzę pewną aplikację przy użyciu Symfony2. Ogólnie rzecz biorąc aplikacja służy zarządzaniu mieniem. Niestety natknąłem na pewien problem. Załóżmy, że posiadam w bazie danych tabelę:
Kod
mysql> SELECT * FROM mienia;
+----+---------+
| id |   nazwa |
+----+---------+
|   1|komputer1|
|   2|komputer2|
|   3|komputer3|
+----+---------+

W tworzonej aplikacji posiadam formularz do edycji powyższej tabeli, który jest napisany "na sztywno" w kodzie. Załóżmy jednak, że użytkownik aplikacji dojdzie do wniosku, że tabela mienia posiada za mało kolumn i doda jeszcze kilka:
Kod
mysql> SELECT * FROM mienia;
+----+---------+-----+-----------+
| id |   nazwa | typ | producent |
+----+---------+-----+-----------+
|   1|komputer1| typ1| producent1|
|   2|komputer2| typ2| producent2|
|   3|komputer3| typ1| producent1|
+----+---------+-----+-----------+

Jak w takiej sytuacji mogę/ powinno się wygenerować formularz, aby po dodaniu do tabeli nowych kolumn formularz był aktualny i zawierał wszystkie pola? Z góry dziękuję za wszelką pomoc.
phpion
Narobisz się przy tym... musisz w pierwszej kolejności pobrać informacje o kolumnach tabeli (nazwy, typy danych, czy może przyjmować NULLe itd.). Oprócz tego musisz wykrywać czy dana kolumna jest kluczem obcym do innej - wówczas pewnie wyświetlisz listę <select> przy wprowadzaniu danych do tej kolumny. Dalej: walidacja pól. Jeśli typ kolumny to np. VARCHAR, a użytkownik będzie chciał tu trzymać adres e-mail przydałaby się odpowiednia walidacja. Do tego dochodzi walidacja zależna, np. jeśli wypełniłem pole A to pole B też jest wymagane. Po drodze może jakiś autocomplete, kalendarzyk (to akurat można wychwycić na podstawie typu pola) itd, itd. Powodzenia smile.gif
cadavre
Można dynamicznie modyfikować formy, ale w ramach podmiany ich zawartości bądź obcinania przesyłanych treści. Traktuje o tym http://symfony.com/doc/current/cookbook/fo...dification.html ale to chyba nie na tym Ci zależy.

Samo Symfony2 nie posiada możliwości generowania FormType'ów z mapowania bazy. Teoretycznie można wygenerować FormType z mapowania Doctrine (np. z adnotacji) - z takiego mechanizmu korzysta generator CRUDa od Sensio (https://github.com/sensiolabs/SensioGeneratorBundle), więc jeśli na serio zależy Ci na takim rozwiązaniu to zacznij od https://github.com/sensiolabs/SensioGenerat...rmGenerator.php

Szczerze jednak odradzam dynamicznego generowania formów, z dwóch powodów:
1. Bezpieczeństwo.
2. Wydajność.

Ad. 2.) Wyobraź sobie, że jeden z najczęściej wykorzystywanych elementów stron HTML (formy) za każdym Requestem będzie generowany dynamicznie odczytując mapowanie każdej z encji. Brzmi jak duży effort dla już 100 userów równolegle. Modyfikacja statycznego FormType po dodaniu nowego pola do bazy to nie tak dużo roboty. ; )
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.