Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Klasa formular, Jak się do tego zabrać?
Tarcil
post
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 24.11.2006

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


Witam

Mam troszkę dzisiaj czasu i buszuję po forum. Nospor napisał gdzieś, że do generowania formularzy (i zabezpieczenia się przed F5) używa własnej klasy (chyba, że źle zrozumiałem jego wypowiedź).

Jako, że próbuję się "otrzaskać" z obiektowo zorientowanym php od razu powstał w mej łepetynie pomysł "napisz sobie klasę do formularzy"... No i faktycznie, pomysł mi się podoba bo jednak formularzy jest mnóstwo na stronach, przy których coś usiłuję dłubać i gdyby się udało fajną klasę do tego zrobić, byłoby spoko.

Na razie wymyśliłem to tak:
1. Główna klasa to oczywiście klasa formular
2. Do niej dodałbym klasę formField, której właściwości to $_name (nazwa pola, do wrzucenia w name="") $_label (do wrzucenia w <label></label>) i $_desc (opis pola)
3. po klasie formField dziedziczyłyby klasy inputField (z właściwością type, czyloi wartością parametru type=""), selectField (z metodą addOption), textareaField itd...
4. Strukturę formularza tworzyłbym w sposób przybliżony do tego:
  1. <?php
  2. $form = new formular();
  3. $field = new inputField('name', Nazwa, 'wpisz swoje imię');
  4. $filed2 = new selectField('plec', 'Płeć', 'wybierz płeć');
  5. $filed2->addOption('k', 'kobieta');
  6. $filed2->addOption('m', 'mężczynza');
  7.  
  8. $form->generateHTML();
  9. ?>

wynikiem ostatniej metody byłby gotowy kod formularza.

Co Wy o tym myślicie? Jaki jest lepszy sposób na to? Jeszcze muszę tu gdzieś zapodać metodę insertValue(), która by wpisywała domyślną wartość... i do pól typu checkbox i do selecta jeszcze coś w rodzaju selectCurrentValue(). Ale czy wg Was podstawowe założenia mają sens? Jeśli nie, to wskażcie mi proszę luki w moim rozumowaniu.

Pozdrawiam!
Tarcil
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
WaterIntelligenc...
post
Post #2





Grupa: Zarejestrowani
Postów: 7
Pomógł: 1
Dołączył: 29.09.2008
Skąd: Świdnica

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


Ostatnio zaprojektowałem klasy formularzy, które powiązałem z Xajaxem. Dodatkowo dodałem klasy walidujące, które są używane przez formularze jak i inne klasy w aplikacji korzystające z tych samych danych.
Jeden formularz miał z reguły około 15 pól, z czego było parę formularzy różniących się między sobą rodzajami pól. Tworzenie klasy formularza to dobry pomysł. Ja zrobiłem tak że teraz jeśli chce dodać formularz definiuję nową klasę o nazwie np. Form_MojFormularz{} w której
1. dodaje kolejno obiekty formularza (input, checkbox itd). -> metoda setFields()
2. implementuje metodę, która pobiera dane z bazy jeśli chcę wyświetlić w tym formularzu dane ->setFieldsData()
3. określam po id, które pola mają być wyłączone (disabled) -> setDisabledFields()
4. implementuje metodę zapisującą dane z formularza do bazy
Można tworzyć obiekty z jednej klasy Form i tam ustawiać nazwę formularza, jednak doszedłem do wniosku, że dla moich potrzeb lepiej jest tworzyć nowe klasy dla nowych formularzy ponieważ istnieje potrzeba implementacji metod takich jak np. zapis do bazy danych.

Możesz zastosować np. Dekorator dla dodawania pól do nowego obiektu formularza, ja akurat z tego nie skorzystałem bo zmniejszyłaby się czytelność mojego kodu i pola dodaje bezpośrednio wewnątrz nowej klasy formularza (do kolekcji $objTagsCollection), a kontroler w roli klienta służy mi jedynie do: uruchomienia formularza/określenia z jakiego walidatora ma korzystać kalsa formularza/określenia pliku szablonu .phtml dla formularza/określenia czy formularza pobierany jest przez wywołanie Ajaxowe czy POST.

Inny patent (uzupełniając to co napisał Black-Berry) to np. każda klasa pola (TagInput{}, TagSelect{} itd) posiada metodę insertMeToXajaxResponse($objXajaxResponse). Formularze tworzę właśnie używając biblioteki Xajax, ale zostawiam możliwość wygenerowania formularza zwykłym POST'em określając to w kontrolerze. Metoda insertMeToXajaxResponse() jest w każdej klasie Taga ponieważ każdy tag w nieco inny sposób dodaje się do odpowiedzi Ajax, można oczywiście zdefiniować odrębną klasę menadżera np. AjaxFormManager{} i jej przypisać odpowiedzialność za dodawanie pól do odpowiedzi Ajax, ale to już chyba kwestia wybrania konkretnej drogi w projekcie. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ponadto każda klasa pola/taga posiada obiekt klasy TagError, jeśli podczas walidacji danych z bazy coś jest nie tak automatycznie zmienia się jego kolor na czerwono lub wykonywane są inne akcje (pomijam dlaczego zapisuje błędne dane do bazy - akurat jest taka potrzeba).

Dzięki tworzeniu klasy formularza zauważysz naprawdę sporo zależności więc zachęcam do pracy.

Ten post edytował WaterIntelligence 2.02.2009, 11:42:22
Go to the top of the page
+Quote Post

Posty w temacie
- Tarcil   [PHP] Klasa formular   23.01.2009, 13:07:30
- - bim2   Ok, ok a do czego twoim zdaniem w tym wypadku będz...   23.01.2009, 15:53:00
- - Crozin   @bim2: class Field extends Form? Eeee... a co to m...   23.01.2009, 16:24:17
- - bim2   Hmm, inputy należą do forma. Można by znać indetyf...   23.01.2009, 17:36:07
- - pinochet   Tez cos takiego pisalem ale nie dopisalem pozatym ...   23.01.2009, 18:43:24
- - Tarcil   Jak pisałem, zaczynam się bawić w oop. Obiekt form...   24.01.2009, 11:43:23
- - Black-Berry   Z doświadczenia moge powiedziec ze lepiej sprawdza...   29.01.2009, 14:49:25
- - WaterIntelligence   Ostatnio zaprojektowałem klasy formularzy, które p...   2.02.2009, 11:38:28
- - Tarcil   Dzięki za porady Teraz muszę skończyć jedno pseu...   4.02.2009, 11:16:58
- - Black-Berry   Jeśli o mnie chodzi to czekam z niecierpliwośćią b...   4.02.2009, 13:50:00
|- - chiken   Cytat(Black-Berry @ 4.02.2009, 13:50...   14.02.2009, 14:13:26
|- - Black-Berry   Cytat(chiken @ 14.02.2009, 14:13:26 )...   14.02.2009, 14:50:52
- - chiken   hmmm, narazie korzystam z domyslnych wygladow, dla...   14.02.2009, 22:59:48
- - bim2   troche dzina konstrukcja, moim zdaniem powinno to ...   15.02.2009, 14:07:16
- - chiken   z definiowaniem klasy form, sie zgadzam, jeszcze u...   15.02.2009, 17:37:02
- - bim2   ale oczywiscie, html elements ma miec tylko dane r...   15.02.2009, 17:39:00
- - chiken   hmmm, a nie lepiej tworzyc obiekty w klasie html_e...   15.02.2009, 17:46:39
- - Black-Berry   Idealnie powinno być tak: [PHP] pobierz, plaintex...   15.02.2009, 18:10:24
- - chiken   dzieki za nakierowanie, wlasnie cos podobnego plan...   15.02.2009, 18:29:44
- - bim2   Ale co za prbolem z validacją? Validacja w tych kl...   15.02.2009, 20:19:32
|- - Black-Berry   Cytat(bim2 @ 15.02.2009, 20:19:32 ) A...   15.02.2009, 21:04:15
- - Whisller   Jakiś czas temu (od wersji 1.21.1 pomyliły mi się ...   15.02.2009, 21:19:12
- - Black-Berry   @bim2 Idea fajna ale z punktu widzenia profesjonal...   15.02.2009, 21:20:07
- - bim2   Ni potrzeba frameworka. Parsuje pregami fdokument ...   15.02.2009, 22:55:22
- - chiken   jak dla mnie ze tak powiem zamotane, powinno sie...   15.02.2009, 22:57:22
- - Black-Berry   Trochę tak. Zasada minimalizmu zawsze się opłaca:/   15.02.2009, 23:52:03
- - bim2   No nie wiem, bardzo ładnie działa i dodanie kolejn...   16.02.2009, 15:36:06
|- - chiken   Cytat(bim2 @ 16.02.2009, 15:36:06 ) N...   16.02.2009, 21:53:27
- - destroyerr   Oczywiście symfony ma formularze w obecnej postaci...   16.02.2009, 15:41:50
- - Crozin   @chlken: checkJavascript() to pewnie coś co genere...   17.02.2009, 08:18:00
- - chiken   no musiialem nie doczytac hehe   17.02.2009, 08:23:51


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: 19.09.2025 - 17:27