Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kilka słow o generowaniu formularzy
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
Vomit
Witam,

Wiele czytalem, googlowalem i czesto spotykalem sie z programistami wykorzystujacymi w swoich projektach biblioteki generujace formularze.

Natrafilem m.in. na PEAR'owski QuickForm, OPF i Former Bastiona.

Sa to spore biblioteki, wspierajace JS, a nawet AJAX. OPF posiada podobno takze zaimplementowany router oraz obiekt request.

Nie wiem jednak czy jest sens wykorzystywac tak wielki kombajn, chce wiec zaprosic do dyskusji - jak napisac prosta, ale kompletna, ciekawa klase do generowania formularzy?
Ludvik
Ja jestem w trakcie tworzenia swojego rozwiązania i powiem Ci tak: prostego nie stworzysz. Jak utniesz kilka klas, to będziesz musiał dopisać kilka metod. Same formularze są dosyć skomplikowanym narzędziem i nie ma prostego sposobu na zapanowanie nad nimi. A czy jest sens to tworzyć? Do prostych aplikacji nie ma sensu, natomiast do większych stron może być uzasadnione.

Póki co mam poglądowy diagram przedstawiający mój pomysł. Sporo jest do zrobienia, ale koncepcja jest mniej więcej widoczna. Miło by było, gdyby ktoś to skomentował smile.gif

http://img104.imageshack.us/img104/6687/main1zf.jpg
Diwi
Cóż, ja jak narazie pisze sobie prostą bibliotekę do generowania formularzy tworzonych bez ingerencji w kod php. Przykładowy kod formularza to coś takiego (w planach chociaż częśc już zakodowana):

Kod
<form:init name="rejestracja">
   <label for="imie">Imię:</label>
   <form:text name="imie" />
   <form:validate field="imie" type="notEmpty">Imię nie może być puste</form:validate>

    <label for="nazwisko">Nazwisko:</label>
    <form:text name="nazwisko" />
    <form:validate field="nazwisko" type="notEmpty">Nazwisko nie może być puste</form:validate>

    <label for="haslo">Hasło:</label>
    <form:password name="haslo" />
    <form:validate field="haslo" type="notEmpty">Hasło musi zostać wpisane</form:validate>

    <label for="powtorz_haslo">Powtórz hasło:</label>
    <form:password name="powtorz_haslo" />
    <form:validate field="haslo" type="notEmpty">Musisz powtórzyć wpisane hasło</form:validate>
    <form:validate field="haslo" compareField="powtorz_haslo" type="compare">Wpisane hasła nie są takie same</form:validate>

</form:init>


Tak to mniej więcej wygląda. Niedługo zapewne przedstawie kod źródłowy
Vomit
No wlasnie, bo to tez jest rzecza dyskusyjna.

Jedni generuja gotowy formularz i jedynie przypisuja go zmiennej w systemie szablonow a drudzy, preferuja takie rozwiazanie jakie podał Diwi.

Ktore lepsze?
MMP
Diwi, testowałem już podobną koncepcje - ... - jest do dużo więcej pisania niżeli potrzeba i w dodatku takie .. nie wygodne.

Moja biblioteka formularzy składa się z dwóch klasa (Form, ValidateForm) + wtyczki fo klasy szablonów

To co zaprezentował divi u mnie by wyglądało tak:

Kod
{form id="NameForm"}
Imię: <input type="text" name="NameForm[Imie]" />
{if #Error[Imie]}
{#Error[Imie][0]} <!-- Wyświetla pierwszy błąd -->
{/if}
Nazwisko: <input type="text" name="NameForm[Nazwisko]" />
{if #Error[Nazwisko]}
{#Error[Nazwisko][0]} <!-- Wyświetla pierwszy błąd -->
{/if}
Hasło: <input type="text" name="NameForm[Haslo]" />
{if #Error[Haslo]}
{#Error[Haslo][0]} <!-- Wyświetla pierwszy błąd -->
{/if}
Powtorz haslo: <input type="text" name="NameForm[ReHaslo]" />
{/form}

i w php
  1. <?php
  2. $oForm = new Form( "NameForm" );
  3. $oValidateForm = new ValidateForm( "Imie" );
  4. $oValidateForm -> is();
  5. $oForm -> errorVal( $oValidateForm );
  6. $oValidateForm = new ValidateForm( "Nazwisko" );
  7. $oValidateForm -> is();
  8. $oForm -> errorVal( $oValidateForm );
  9. $oValidateForm = new ValidateForm( "Haslo" );
  10. $oValidateForm -> is();
  11. $oValidateForm -> equal( $oForm -> ReHaslo() );
  12. $oForm -> errorVal( $oValidateForm );
  13. $oTemplate -> form( $oForm );
  14. ?>

$oValidateForm wysyła kod błędu do $oForm, a $oForm pobiera odpowiedni string z plików językowych smile.gif

[Dodano] Ludvik, popitoliło Cię z tym diagramem smile.gif. Takie rozbicie nie ma sensu jeżeli chodzi o aplikacje http
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-2024 Invision Power Services, Inc.