Feedback OOP Fomulier (simpel scriptje)
Ik zelf ben pas een maandje of 5 bezig met OOP
en vroeg ik me af hoe dit er uit ziet
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
class Form_Element {
public $type = ''; //default
public $label = 'label'; //default
public function __construct($type) {
$type = trim($type);
if($type == 'text' || $type == 'password' || $type == 'button') {
$this->type = $type;
return $this;
} else {
throw new Exception("kan dit object niet aanmaken, het type:".$type." komt niet overeen met het systeem.");
}
}
public function setLabel($label) {
$this->label = trim($label);
return $this;
}
}
class Form {
public $form;
public function addElements($array) {
if(is_array($array)) {
if(!empty($array)) {
$this->form = '<form action="index.php" method="post">'."\r\n";
foreach ($array as $element) {
switch ($element->type) {
case 'text':
$this->form .= '<label>'.$element->label.':</label> <input type="text" name="'.strtolower($element->label).'">'."\r\n";
break;
case 'password':
$this->form .= '<label>'.$element->label.':</label> <input type="password" name="'.strtolower($element->label).'">'."\r\n";
break;
case 'button':
$this->form .= '<input type="submit" name="submit" value="'.$element->label.'">'."\r\n";
break;
}
}
$this->form .= '</form>';
echo $this->form;
} else {
throw new Exception("Error: array() is empty.");
}
} else {
throw new Exception("Error: Can't use the addElements, it most be an array() to match the system.");
}
}
}
//dit word de code die je voortaan gebruikt voor een fomulier
try {
if($_SERVER['REQUEST_METHOD'] == 'POST') {
//post process example: $post = new Form_Post(trim($_POST['username']),sha1($_POST['password']));
echo'hier komt het process';
} else {
$username = new Form_Element('text');
$username->setLabel('Username');
$password = new Form_Element('password');
$password->setLabel('Password');
$button = new Form_Element('button');
$button->setLabel('Login');
$form = new Form();
$form->addElements(array($username,$password,$button));
}
} catch (Exception $e) {
echo $e->getMessage();
}
?>
class Form_Element {
public $type = ''; //default
public $label = 'label'; //default
public function __construct($type) {
$type = trim($type);
if($type == 'text' || $type == 'password' || $type == 'button') {
$this->type = $type;
return $this;
} else {
throw new Exception("kan dit object niet aanmaken, het type:".$type." komt niet overeen met het systeem.");
}
}
public function setLabel($label) {
$this->label = trim($label);
return $this;
}
}
class Form {
public $form;
public function addElements($array) {
if(is_array($array)) {
if(!empty($array)) {
$this->form = '<form action="index.php" method="post">'."\r\n";
foreach ($array as $element) {
switch ($element->type) {
case 'text':
$this->form .= '<label>'.$element->label.':</label> <input type="text" name="'.strtolower($element->label).'">'."\r\n";
break;
case 'password':
$this->form .= '<label>'.$element->label.':</label> <input type="password" name="'.strtolower($element->label).'">'."\r\n";
break;
case 'button':
$this->form .= '<input type="submit" name="submit" value="'.$element->label.'">'."\r\n";
break;
}
}
$this->form .= '</form>';
echo $this->form;
} else {
throw new Exception("Error: array() is empty.");
}
} else {
throw new Exception("Error: Can't use the addElements, it most be an array() to match the system.");
}
}
}
//dit word de code die je voortaan gebruikt voor een fomulier
try {
if($_SERVER['REQUEST_METHOD'] == 'POST') {
//post process example: $post = new Form_Post(trim($_POST['username']),sha1($_POST['password']));
echo'hier komt het process';
} else {
$username = new Form_Element('text');
$username->setLabel('Username');
$password = new Form_Element('password');
$password->setLabel('Password');
$button = new Form_Element('button');
$button->setLabel('Login');
$form = new Form();
$form->addElements(array($username,$password,$button));
}
} catch (Exception $e) {
echo $e->getMessage();
}
?>
het is uiteraard nog een klein simpel scriptje die alleen een login fomulier maakt, dit word nog uitgebreid zodat er meer elementen bij komen.
maar ik vroeg me af of het op deze manier goed gaat :)
en of ik dingen anders moet doen.
greetz Rob.
Gewijzigd op 11/09/2011 16:50:30 door Robert dat ben ik
Ik snap eigenlijk niet waarom je op zo'n manier een form wil maken
Crude Oil op 11/09/2011 16:14:34:
Ik snap eigenlijk niet waarom je op zo'n manier een form wil maken
geef eens wat meer informatie waarom niet?
graag wil ik dus feedback hebben wat ik anders zou moeten doen
greetz rob
Gewijzigd op 11/09/2011 16:56:52 door Crude Oil
Crude Oil op 11/09/2011 16:28:28:
waarom zou je met veel phpcode een form maken, lijkt mme niet nuttig. Het is nog veel korter om meteen de htmlcode te gebruiken.
Niet als je een framework wilt maken.
dan is het wel nuttig zulke opties te hebben.
greetz Rob
Gewijzigd op 11/09/2011 16:55:36 door Crude Oil
Crude Oil op 11/09/2011 16:55:09:
Zeg dat dan meteen :P
mijn fout :) sorry :)
maar hoe lijkt dit dan kwa opstelling?
Je moet niet direct bij het toevoegen van elementen de HTML gaan renderen. Dan kan er namelijk helemaal niets meer aangepast worden. Gebruik dus een render() of __toString() methode (liefst beide).
Pim - op 12/09/2011 16:56:21:
Je moet niet direct bij het toevoegen van elementen de HTML gaan renderen. Dan kan er namelijk helemaal niets meer aangepast worden. Gebruik dus een render() of __toString() methode (liefst beide).
bedankt voor je reactie Pim!
hoe moet ik me dit voorstellen die 2 methode's?
wat doet wat? en hoe zou dit er uit kunnen zien ongeveer?
al vast bedankt
Rob
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
class Form {
protected $_elements = array();
public function addElements(array $elements) {
$this->_elements += $elements;
}
public function render() {
$string = '<form action="index.php" method="post">'."\r\n";
foreach ($this->_elements as $element) {
switch ($element->type) {
case 'text':
$string .= '<label>'.$element->label.':</label> <input type="text" name="'.strtolower($element->label).'">'."\r\n";
break;
case 'password':
$string .= '<label>'.$element->label.':</label> <input type="password" name="'.strtolower($element->label).'">'."\r\n";
break;
case 'button':
$string .= '<input type="submit" name="submit" value="'.$element->label.'">'."\r\n";
break;
}
}
$string .= '</form>';
return $this->form;
}
public function __toString() {
return $this->render();
}
}
?>
class Form {
protected $_elements = array();
public function addElements(array $elements) {
$this->_elements += $elements;
}
public function render() {
$string = '<form action="index.php" method="post">'."\r\n";
foreach ($this->_elements as $element) {
switch ($element->type) {
case 'text':
$string .= '<label>'.$element->label.':</label> <input type="text" name="'.strtolower($element->label).'">'."\r\n";
break;
case 'password':
$string .= '<label>'.$element->label.':</label> <input type="password" name="'.strtolower($element->label).'">'."\r\n";
break;
case 'button':
$string .= '<input type="submit" name="submit" value="'.$element->label.'">'."\r\n";
break;
}
}
$string .= '</form>';
return $this->form;
}
public function __toString() {
return $this->render();
}
}
?>
De volgende stap is dat je de elementen zichzelf laat renderen. Geef Form_Element een abstracte 'render' methode en breidt deze klasse uit voor elk type inputveld (text, pw, button etc). Form#render() wordt dan:
Pim - op 12/09/2011 17:28:49:
Bedankt Pim voor deze voorbeeld, ik ga er mee aan de slag
Ik zal als ie klaar is een repost doen
Rob
Toevoeging op 13/09/2011 13:43:10:
ik ben even wezen stoeien met de code maar ik kom even niet uit de abstract render methode dus heb ik de class verlengd met een extends Form_Html
Ik heb de code ondertussen naar dit aangepast:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
class Form_Html {
protected function getHtmlElement($element) {
$allow_elements = array('text','password','textarea','button');
if (in_array($element->type, $allow_elements) === false) {
throw new Exception("type:".$element->type." doesn't match the system.");
} else {
if($element->type == 'text') { return '<label>'.$element->label.'</label> <input type="text" name="'.strtolower($element->label).'">'; }
if($element->type == 'textarea') { return '<label>'.$element->label.'</label> <textarea name="'.strtolower($element->label).'"></textarea>'; }
if($element->type == 'password') { return '<label>'.$element->label.'</label> <input type="password" name="'.strtolower($element->label).'">'; }
if($element->type == 'button') { return '<input type="submit" value="'.strtolower($element->label).'">'; }
}
}
}
class Form_Element {
public $type = ''; //default
public $label = 'label'; //default
public function __construct($type) {
$this->type = trim($type);
return $this;
}
public function setLabel($label) {
$this->label = trim($label);
return $this;
}
}
class Form extends Form_Html {
protected $_elements = array();
public function addElements(array $elements) {
$this->_elements += $elements;
}
private function render() {
$string = '<form action="#" method="post">'."\r\n";
foreach($this->_elements as $element) {
$string .= $this->getHtmlElement($element)."\r\n";
}
$string .= '</form>'."\r\n";
return $string;
}
public function draw() {
return $this->render();
}
}
try {
if($_SERVER['REQUEST_METHOD'] == 'POST') {
echo'hier komt het process';
} else {
$username = new Form_Element('text');
$username->setLabel('Username');
$password = new Form_Element('password');
$password->setLabel('Password');
$button = new Form_Element('button');
$button->setLabel('Login');
$form = new Form();
$form->addElements(array($username,$password,$button));
echo $form->draw();
}
} catch (Exception $e) {
echo $e->getMessage();
}
?>
class Form_Html {
protected function getHtmlElement($element) {
$allow_elements = array('text','password','textarea','button');
if (in_array($element->type, $allow_elements) === false) {
throw new Exception("type:".$element->type." doesn't match the system.");
} else {
if($element->type == 'text') { return '<label>'.$element->label.'</label> <input type="text" name="'.strtolower($element->label).'">'; }
if($element->type == 'textarea') { return '<label>'.$element->label.'</label> <textarea name="'.strtolower($element->label).'"></textarea>'; }
if($element->type == 'password') { return '<label>'.$element->label.'</label> <input type="password" name="'.strtolower($element->label).'">'; }
if($element->type == 'button') { return '<input type="submit" value="'.strtolower($element->label).'">'; }
}
}
}
class Form_Element {
public $type = ''; //default
public $label = 'label'; //default
public function __construct($type) {
$this->type = trim($type);
return $this;
}
public function setLabel($label) {
$this->label = trim($label);
return $this;
}
}
class Form extends Form_Html {
protected $_elements = array();
public function addElements(array $elements) {
$this->_elements += $elements;
}
private function render() {
$string = '<form action="#" method="post">'."\r\n";
foreach($this->_elements as $element) {
$string .= $this->getHtmlElement($element)."\r\n";
}
$string .= '</form>'."\r\n";
return $string;
}
public function draw() {
return $this->render();
}
}
try {
if($_SERVER['REQUEST_METHOD'] == 'POST') {
echo'hier komt het process';
} else {
$username = new Form_Element('text');
$username->setLabel('Username');
$password = new Form_Element('password');
$password->setLabel('Password');
$button = new Form_Element('button');
$button->setLabel('Login');
$form = new Form();
$form->addElements(array($username,$password,$button));
echo $form->draw();
}
} catch (Exception $e) {
echo $e->getMessage();
}
?>
@Pim: zou je een abstract voorbeeld kunnen geven?
Rob
Gewijzigd op 13/09/2011 13:42:25 door Robert dat ben ik