![]() |
![]() |
![]()
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: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
To co ja proponuję to tylko szkic, który powstał w chwili, gdy z PMadejem rozmawialiśmy i walidacji danych z formularza. Pomyślałem w tym momencie o tym, że formularz to też obiekt, którefgo jedną z własności jest pole, które też jest obiektem.
Powyższy kod powstał w sumie w 45 minut i jst tylko szkicem. Jest tam tylko jedna metoda walidacyjna ale po odpowiedniej modyfikacji metody można dodawać - zacząc trzeba od budowy obiektu "FormField". tak samo użycie linijki ze smarty bylo tylko przykładem. W praktyce trzeba by to rozwiązać inaczej. Zresztą całe rysowanie formularza trzeba zmienić. Wydaje mi się, że możńa nieco zapomnieć o generowaniu formularza - ważniejsze jest przechwytywanie danych i ich walidacja. Tak jak piszesz hawk, generowanie pojedyńczych pól raczejnie ma sensu. Lepszym chyba byłoby: 1. Genrujemy formularz "klasycznie" 2. Tworzymy tablicę z nazw pół i ich wartości 3. Dodajemy to tablicy typy walidacji dla okreslonego pola 4. Walidujemy 5. Jeśli coś jest nie tak Generujemy formularz jak w 1 - assignująć tablicę błędów. Pisane z palca: [php:1:2efa755e74]<?php $Form = new FormValidator( $_POST ); $Form->Field['login']->CheckList['required'] = true; $Form->Field['login']->CheckList['minLength'] = 3; $Form->Field['pass']->CheckList['requred'] = true; $Form->Field['pas2']->CheckList['requred'] = true; $Form->Field['pass']->CheckList['compare'] = $Form->Field['pas2']; $isFormValid = $Form->ValidateFields(); ?>[/php:1:2efa755e74] a ValidateFields() wywołuje metody prywatne, takie jak:[php:1:2efa755e74]<?php function _required( $strFieldName ) { if( !isset($this->Field[$strFieldName])) { $this->Field[$strFieldName]->Errors[] = Lang::Get('EmptyFormField'); return false; } return true; } ?>[/php:1:2efa755e74] |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.09.2025 - 09:13 |