![]() |
![]() ![]() |
![]() |
![]()
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. |
|
|
![]()
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
![]() |
|
|
![]()
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! |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 01:28 |