![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Dziaiaj podczas dyskusji z PMadejem wynikł temat obiektowej obsługi formularzy. Zaświtał mi w głowie taki schemacik, jaki podaję niżej. Oczywiscie nie gwarantuję, ze zadziała - ale myślę, że wystarczająco obrazuje mój tok myśłenia. Co sądzicie do tagiego podejścia do tematu walidacji dancy hz formularzy?
BTW: w kodzie wielu rzeczy nie ma, ale nie w tym sęk... [php:1:5d9c559937]<?php class Form { var $arrFormElements = NULL; function Form() { $this->FormElements = array(); } function CreateField( $strName ) { $this->arrFormElements[$strFieldName] = new FormField(); } } class FormField { var $strName = ''; var $strType = ''; var $mixData = ''; var $blnRequired = false; var $blnValid = false; var $blnPattern = NULL; var $mixPatternName = ''; var $arrErrors = NULL; function FormField() { $this->arrErrors = array(); } function Create() { $smarty->display( 'form_elements/'.$this->strFieldType.'.tpl' ); /** * Zakładamy, ze mamy teplatesy typu: textarea, input, button itp. */ } function ValidatePattern( ) { if( $this->blnRequired ) { $this->blnValid = !is_empty( $this->mixData ); if( !$this->blnValid ) { $this->arrErrors[] = 'Must be filled'; } } if( !is_null( $this->$blnPattern ) ) { $this->blnValid = preg_match($this->$blnPattern, $this->$blnData); if( !$this->blnValid ) { $this->arrErrors[] = 'Must be corrected '.$this->strPatternName.' value!'; } } } } /** * Example of use */ $Form = new Form(); $Form->CreateField( 'pkwiu', true ); $Form->arrFormElements['pkwiu']->strType = 'input_text'; $Form->arrFormElements['pkwiu']->strData = $_POST['pkwiu']; $Form->arrFormElements['pkwiu']->strPattern = '([0-9]{2}.[0-9]{1,2}.[0-9]{1,2}-[0-9]{1,2}.[0-9]{1,2})'; $Form->arrFormElements['pkwiu']->strPatternName = 'PKWiU'; $Form->arrFormElements['pkwiu']->ValidatePattern(); if( !$Form->arrFormElements['pkwiu']->blnValid ) { $Form->arrFormElements['pkwiu']->Create(); foreach( $Form->arrFormElements['pkwiu']->arrErrors as $strError ) { echo '<br />'.$strError; } } ?> [/php:1:5d9c559937] |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Mi się generalnie nie podoba opcja z generowaniem kodu HTML przez klasę formularzy. Bo to JEST pomieszanie warstwy prezentacji z logiką biznesową.
Jedna osoba robi kod HTML (ew. szablon), druga php, i system musi to skleić do kupy. Nie może być tak, że na stronie wstawiamy wielkie "tutaj będzie nasz formularz", i facet od CSS wysyła facetowi od php maila żeby wpisał w swoim kodzie takie a takie style. Tylko że aby to zrobić, trzeba albo wbudować to w system szablonów, albo parsować cały HTML przed wywaleniem na ekran. Bo jakiś mechanizm musi znajdować formularze i wstawiać co trzeba. W dobrym kierunku idzie chyba WACT, bo tam <form> jest - oprócz tego że jest formularzem w HTML - jednym z tagów engine, który rozumie co to jest formularz i jakoś tam łączy z kontrolerem formularzy. Ale to jest wbudowane w silnik szablonów, i nie do użycia np. w Smarty. Może po prostu nie da się zrobić dobrego systemu nie związanego z szablonami? ... A gdyby zrobić tak: jest sobie kod HTML, w nim formularz, i jakiś parser zamienia to w php który wstawia odpowiednie wartości. Tzn: [xml:1:b2681a3a0d]<form action="foo.php" method="post"> blah blah <div id="bar-error" class="form-error"/> <input type="text" name="bar" class="form-input"/> </form>[/xml:1:b2681a3a0d] zamieniamy na: [php:1:b2681a3a0d]<form action="foo.php" method="post"> blah blah <?php if ($jest_błąd_w_bar) { ?> <div id="bar-error" class="form-error"> <?php echo $info_o_błędzie_w_bar; ?> </div> <?php } ?> <input type="text" name="bar" class="form-input" value="<?php echo $zawartość_bar; ?>"> </form>[/php:1:b2681a3a0d] Taką transformację można albo zrobić sobie offline, albo w jakiś magiczny sposób generować za każdym razem jak zmienia się plik oryginalny. A w php będzie sobie obiekt formularza, który robi walidację itd, i ustawia odpowiednie zmienne, żeby do HTML wstawiło się to co trzeba. W końcu PHP5 ma parser DOM do HTMLa, więc parsowanie jest debilne: getElementsByTagName('form') itd. Walidacja itd to inna sprawa, ale coraz bardziej mi sie to podoba (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) . |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 07:08 |