Zdravím,
momentálně se snažím pořádně naučit PHP objektově, a jelikož mám nejraději učit se na něčem za chodu, snažím se napsat univerzální tvorbu formulářů, s následnou validací. Zatím mám uděláno pouze tvorbu formulářových Inputů a následné přidělené vlastních validačních pravidel.
Chtěl bych od vás proto radu, jestli na to jdu vůbec aspoň trochu dobře, abych pak nezjistil, že jsem se celou dobu učil psát OOP špatným způsobem. Proto děkuji za prolouskání mého kódu a udělení nějaký rad, zda-li je kód vůbec použitelný.
Díky.
PHP kód:
<?php
class Forms {
/*
* Defaultni nastaveni pravidel pro vsechny formularova data
* Tyto data muzete pote libovolne upravovat, viz funkce teto tridy zvana 'add_rule'
*
*/
public $rules = Array ( "DEFAULT" => Array ( "MAXLENGHT" => "20",
"MINLENGHT" => "10",
"REQUIRED" => TRUE )
);
/* Funkce umoznujici nastaveni pravidel pro formularova data
* Nastaveni se zapisuje ve tvaru:
*
* AddRule ( "PRAVIDLO", "HODNOTA" )
* popripade vicenasobne pridani pravidel:
* AddRule ( "PRAVIDLO_1", "HODNOTA_1", "PRAVIDLO_2", "HODNOTA_2", atd... )
*
*/
public function AddRule( $rules ) {
$rules = func_get_args();
foreach($rules as $key => $value) {
if($key % 2 == 0) $this->rules["USER_DEFINED"][$value] = isset($rules[$key++]) ? $rules[$key++] : null;
}
$this->rules[$this->id] = array_merge( $this->rules["DEFAULT"], $this->rules["USER_DEFINED"] );
return $this;
}
/* ADD CHILD
*
* Funkce dostava vygenerovany formularovy input a formularovy label, ktery spoji a vypise na obrazovku vysledny formularovy prvek
*
*/
public function AddChild( $control, $label ) {
echo $label -> label . $control -> form;
}
/* ADD TEXT INPUT
*
* Funkce dovoluje vytvorit formularovy prvek typu - <input type="text" />
*
* Pri vytvareni tridy predame pomoci parametru vsechny mozne nastaveni, ve tvaru:
* AddTextInput ( $name, $label, $value, $cls, $id )
* Tedy napr.:
* AddTextInput ( "username", "Uzivatelske jmeno", "Zadejte uz. jmeno", "usernam_trida", "username_id" );
*
* Tyto informace predame tride TextInput, ktera vygeneruje vysledny formularovy input
* Dalsi doplnujici info predame tride Label, ktera nam vygeneruje vysledny LABEL ve tvaru <label for="id"> $label </label>
* Vysledek spojime pomoci funkce AddChild a konecny formularovy prvek vypiseme
*
*/
public function AddTextInput( $name = NULL, $label = NULL, $value = NULL, $cls = NULL, $id = NULL ) {
if ( $id == "" ) { $id = $name; }
$this -> id = $id;
$control = new TextInput( $type = "text", $name, $value, $cls, $id );
$label = new Label ( $label, $id );
$this -> AddChild( $control, $label );
return $this;
}
/* ADD PASSWORD INPUT
*
* Totozna jako funkce AddTextInput
*
*/
public function AddPasswordInput( $name = NULL, $label = NULL, $value = NULL, $cls = NULL, $id = NULL ) {
if ( $id == "" ) { $id = $name; }
$this -> id = $id;
$control = new TextInput( $type = "password", $name, $value, $cls, $id );
$label = new Label ( $label, $id );
$this -> AddChild( $control, $label );
return $this;
}
/* ADD EMAIL INPUT
*
* Totozna jako funkce AddTextInput
*
*/
public function AddEmailInput( $name = NULL, $label = NULL, $value = NULL, $cls = NULL, $id = NULL ) {
if ( $id == "" ) { $id = $name; }
$this -> id = $id;
$control = new TextInput( $type = "text", $name, $value, $cls, $id );
$label = new Label ( $label, $id );
$this -> AddChild( $control, $label );
return $this;
}
/* ADD SUBMIT INPUT
*
* Totozna jako funkce AddTextInput
*
*/
public function AddSubmitInput( $name = NULL, $label = NULL, $value = NULL, $cls = NULL, $id = NULL ) {
if ( $id == "" ) { $id = $name; }
$control = new TextInput( $type = "submit", $name, $value, $cls, $id );
$label = new Label ( $label, $id );
$this -> AddChild( $control, $label );
return $this;
}
}
/* TEXT INPUT
*
* Trida dostava pomoci parametru uzivatelsky definovane informace o formularovem inputu
* A nasledne z nej sklada dany formularovy prvek a predava zpet
*
*/
class TextInput extends Forms {
public function __construct( $type, $name, $value, $cls, $id ) {
$this -> form = '<input type="'.$type.'" name="'.$name.'" value="'.$value.'" class="'.$cls.'" id="'.$id.'" onChange="validate(this)" />'."\n" . '<div class="validate_input" id="'.$id.'_validate"></div>'."\n";
}
}
/* LABEL
*
* Trida dostava pomoci parametru uzivatelsky definovane informace o formularovem labelu
* A nasledne z nej sklada dany formularovy label a predava zpet
*
*/
class Label extends Forms {
public function __construct( $label, $id ) {
if ( $label != "" ) $this -> label = "\t".'<label for="'.$id.'">'.$label.'</label>';
else $this -> label = "";
}
}
?>
HTML Vytváření formulářů, příklad:
$forms = new Forms();
$forms -> AddTextInput("username", "Vase jmeno", "Vlozte sve jmeno", "input_cls", "input_id") -> AddRule( "MAXLENGHT","50" );
$forms -> AddPasswordInput("password", "Vase heslo", "Vlozte sve jmeno 2", "input2_cls", "input2_id") -> AddRule( "MAXLENGHT","40" );
$forms -> AddEmailInput("email", "Vas emial:", "Vlozte svuj email", "email_cls", "email_id") -> AddRule( "MAXLENGHT","40", "MINLENGHT","30" );
$forms -> AddSubmitInput("submit", "", "ODESLAT", "submit_cls", "submit_id");