Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF][Symfony2]Dynamiczne generowanie formularza.
Skwareknec
post 22.08.2013, 09:54:13
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 13.05.2009

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


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.
Go to the top of the page
+Quote Post
phpion
post 22.08.2013, 12:08:57
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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
Go to the top of the page
+Quote Post
cadavre
post 22.08.2013, 20:08:50
Post #3





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

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


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. ; )


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 01:28