simple OOP formulier
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
class cForm
{
//var form tag
private $_TagAction;
private $_TagMethod;
private $_TagName;
private $_TagExtraAttr;
//var form field
private $_FieldType;
private $_FieldName;
private $_FieldValue;
private $_FieldChecked;
//var select tag
private $_SelectName;
private $_SelectOption;
private $_SelectOptionSelected;
//var button
private $_ButtonValue;
private $_ButtonName;
public function __construct( $_TagAction , $_TagMethod , $_TagName , $_TagExtraAttr ){
$this->_TagAction = $_TagAction;
$this->_TagMethod = $_TagMethod;
$this->_TagName = $_TagName;
$this->_TagExtraAttr = $_TagExtraAttr;
}
public function getTagOpen(){
return '<form action="' . $this->_TagAction . '" method="' . $this->_TagMethod . '" name="' . $this->_TagName .'" ' . $this->_TagExtraAttr . '>' . PHP_EOL;
}
public function setFormField( $FieldType , $FieldName , $FieldValue , $FieldChecked ){
$this->_FieldType = $FieldType;
$this->_FieldName = $FieldName;
$this->_FieldValue = $FieldValue;
$this->_FieldChecked = $FieldChecked;
}
public function getFormField(){
return '<input type="' . $this->_FieldType . '" name="' . $this->_FieldName . '" value="' . $this->_FieldValue . '" ' . $this->_FieldChecked . '>'. PHP_EOL;
}
public function setSelectOpen($SelectName){
$this->_SelectName = $SelectName;
}
public function getSelectOpen(){
return '<select name="'.$this->_SelectName.'">';
}
public function setSelectOption( $SelectOption ,$SelectOptionSelected ){
$this->_SelectOption = $SelectOption;
$this->_SelectOptionSelected = $SelectOptionSelected;
}
public function getSelectOption(){
return '<option' . $this->_SelectOptionSelected . '>' . $this->_SelectOption . '</option>' . PHP_EOL;
}
public function getSelectEnd(){
return '</select>' . PHP_EOL;
}
public function setButton( $ButtonValue , $ButtonName ){
$this->_ButtonValue = $ButtonValue;
$this->_ButtonName = $ButtonName;
}
public function getButton(){
return '<input type="submit" value="' . $this->_ButtonValue . '" name="'. $this->_ButtonName .'">' . PHP_EOL;
}
public function getTagEnd(){
return '</form>' . PHP_EOL;
}
}
$objForm = new cForm( '/' , 'post' , 'test' , 'onsubmit="test"' );
//form start
echo $objForm->getTagOpen();
//text field
$objForm->setFormField('text','2', '' , '');
echo $objForm->getFormField();
//checkbox
$objForm->setFormField('checkbox','2', '' , 'checked="checked"');
echo $objForm->getFormField();
//selectbox
// start selectbox
$objForm->setSelectOpen('bas');
echo $objForm->getSelectOpen();
// option selectbox
$objForm->setSelectOption('bas', ' selected');
echo $objForm->getSelectOption();
$objForm->setSelectOption('123', '');
echo $objForm->getSelectOption();
$objForm->setSelectOption('456', '');
echo $objForm->getSelectOption();
//end selectbox
echo $objForm->getSelectEnd();
//button
$objForm->setButton('test type','test name' );
echo $objForm->getButton();
//form end
echo $objForm->getTagEnd();
?>
class cForm
{
//var form tag
private $_TagAction;
private $_TagMethod;
private $_TagName;
private $_TagExtraAttr;
//var form field
private $_FieldType;
private $_FieldName;
private $_FieldValue;
private $_FieldChecked;
//var select tag
private $_SelectName;
private $_SelectOption;
private $_SelectOptionSelected;
//var button
private $_ButtonValue;
private $_ButtonName;
public function __construct( $_TagAction , $_TagMethod , $_TagName , $_TagExtraAttr ){
$this->_TagAction = $_TagAction;
$this->_TagMethod = $_TagMethod;
$this->_TagName = $_TagName;
$this->_TagExtraAttr = $_TagExtraAttr;
}
public function getTagOpen(){
return '<form action="' . $this->_TagAction . '" method="' . $this->_TagMethod . '" name="' . $this->_TagName .'" ' . $this->_TagExtraAttr . '>' . PHP_EOL;
}
public function setFormField( $FieldType , $FieldName , $FieldValue , $FieldChecked ){
$this->_FieldType = $FieldType;
$this->_FieldName = $FieldName;
$this->_FieldValue = $FieldValue;
$this->_FieldChecked = $FieldChecked;
}
public function getFormField(){
return '<input type="' . $this->_FieldType . '" name="' . $this->_FieldName . '" value="' . $this->_FieldValue . '" ' . $this->_FieldChecked . '>'. PHP_EOL;
}
public function setSelectOpen($SelectName){
$this->_SelectName = $SelectName;
}
public function getSelectOpen(){
return '<select name="'.$this->_SelectName.'">';
}
public function setSelectOption( $SelectOption ,$SelectOptionSelected ){
$this->_SelectOption = $SelectOption;
$this->_SelectOptionSelected = $SelectOptionSelected;
}
public function getSelectOption(){
return '<option' . $this->_SelectOptionSelected . '>' . $this->_SelectOption . '</option>' . PHP_EOL;
}
public function getSelectEnd(){
return '</select>' . PHP_EOL;
}
public function setButton( $ButtonValue , $ButtonName ){
$this->_ButtonValue = $ButtonValue;
$this->_ButtonName = $ButtonName;
}
public function getButton(){
return '<input type="submit" value="' . $this->_ButtonValue . '" name="'. $this->_ButtonName .'">' . PHP_EOL;
}
public function getTagEnd(){
return '</form>' . PHP_EOL;
}
}
$objForm = new cForm( '/' , 'post' , 'test' , 'onsubmit="test"' );
//form start
echo $objForm->getTagOpen();
//text field
$objForm->setFormField('text','2', '' , '');
echo $objForm->getFormField();
//checkbox
$objForm->setFormField('checkbox','2', '' , 'checked="checked"');
echo $objForm->getFormField();
//selectbox
// start selectbox
$objForm->setSelectOpen('bas');
echo $objForm->getSelectOpen();
// option selectbox
$objForm->setSelectOption('bas', ' selected');
echo $objForm->getSelectOption();
$objForm->setSelectOption('123', '');
echo $objForm->getSelectOption();
$objForm->setSelectOption('456', '');
echo $objForm->getSelectOption();
//end selectbox
echo $objForm->getSelectEnd();
//button
$objForm->setButton('test type','test name' );
echo $objForm->getButton();
//form end
echo $objForm->getTagEnd();
?>
Gewijzigd op 05/11/2012 13:53:47 door Bas D L
En nu?
Kun je aub 1 code blok verwijderen?
Kun je aub 1 code blok verwijderen?
@wouter, done...
En dan nu de eerste vraag, wat moeten we hier mee?
Doordat ik de code heb gewijzigd is mijn vraag verdwenen :-$
Ben net begonnen met OOP get en Set.
Mijn vraag is of dit zo de juiste opzet is in OOP, of dat het geen OOP is of nog beter/naders kan.
Ben net begonnen met OOP get en Set.
Mijn vraag is of dit zo de juiste opzet is in OOP, of dat het geen OOP is of nog beter/naders kan.
Dit is totaal geen OOP, alleen maar een mooie klasse met functies erin.
En je hebt het de hele tijd over het leren van 'get' en 'set', maar je weet dat dat gewoon maar 2 functies zijn? We hebben ze een speciale naam gegeven omdat deze functies de meest voorkomende taken uitvoeren, eigenschappen instellen en verkrijgen. Maar van de rest is er niks vreemdst aan.
Qua OO heb je je te houden aan 1 hele grote basis regel: Elke klasse en elke methode heeft maar 1 verantwoordelijkheid, zodra er meer zijn splits je het op in meerdere klassen of meerdere methoden.
In jou geval heb je alles in 1 klasse gezet wat enorm indruist tegen deze regel. Schrijf allereerst maar eens op welke verantwoordelijkheden/taken je in deze applicatie hebt.
En je hebt het de hele tijd over het leren van 'get' en 'set', maar je weet dat dat gewoon maar 2 functies zijn? We hebben ze een speciale naam gegeven omdat deze functies de meest voorkomende taken uitvoeren, eigenschappen instellen en verkrijgen. Maar van de rest is er niks vreemdst aan.
Qua OO heb je je te houden aan 1 hele grote basis regel: Elke klasse en elke methode heeft maar 1 verantwoordelijkheid, zodra er meer zijn splits je het op in meerdere klassen of meerdere methoden.
In jou geval heb je alles in 1 klasse gezet wat enorm indruist tegen deze regel. Schrijf allereerst maar eens op welke verantwoordelijkheden/taken je in deze applicatie hebt.
Interpretaties van OOP kunnen verschillen, maar ik zou zelf van buttons en inputfields ook losse classes maken. Buttons en inputfields kunnen zelfs een gemeenschappelijke superclass delen. Op deze manier zijn alle objecten verantwoordelijk voor hun eigen gedrag.
Het lastige is, "hoe praktisch is dit?" Want misschien wil je jouw inputfields in a een tabel of div stoppen, met de volgende code zal dat niet makkelijk lukken.
Natuurlijk kan je dan van al je HTML tags ook classes maken:
Nu kan je doorgaan totdat je helemaal geen HTML meer ziet! Hoe praktisch dat is, laat ik in het midden. Kijk bijvoorbeeld eens naar: http://www.php.net/manual/en/intro.dom.php
Om terug te komen op jouw code, probeer er voor te zorgen dat Form zich alleen bezig houdt met zichzelf, en dat hij zo min mogelijk bewust is van de status van buttons en andere inputfields. Properties als "_ButtonValue" of "_FieldType" horen d'r niet in thuis. Denk ook eens na hoe goed jouw huidige setup werkt als je dropdown boxes, radio knoppen en checkboxes wilt toevoegen.
Het lastige is, "hoe praktisch is dit?" Want misschien wil je jouw inputfields in a een tabel of div stoppen, met de volgende code zal dat niet makkelijk lukken.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$form = new Form();
$form->add(new InputField("username");
$form->add(new InputField("password");
$form->add(new Button("click me"));
print $form->getHtml();
?>
$form = new Form();
$form->add(new InputField("username");
$form->add(new InputField("password");
$form->add(new Button("click me"));
print $form->getHtml();
?>
Natuurlijk kan je dan van al je HTML tags ook classes maken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$form = new Form();
$div = new Div();
$form->add($div);
// Form fields are nested in a div, which is nested in a form.
$div->add(new InputField("username"));
$div->add(new InputField("password"));
$div->add(new Button("click me"));
print $form->getHtml();
?>
$form = new Form();
$div = new Div();
$form->add($div);
// Form fields are nested in a div, which is nested in a form.
$div->add(new InputField("username"));
$div->add(new InputField("password"));
$div->add(new Button("click me"));
print $form->getHtml();
?>
Nu kan je doorgaan totdat je helemaal geen HTML meer ziet! Hoe praktisch dat is, laat ik in het midden. Kijk bijvoorbeeld eens naar: http://www.php.net/manual/en/intro.dom.php
Om terug te komen op jouw code, probeer er voor te zorgen dat Form zich alleen bezig houdt met zichzelf, en dat hij zo min mogelijk bewust is van de status van buttons en andere inputfields. Properties als "_ButtonValue" of "_FieldType" horen d'r niet in thuis. Denk ook eens na hoe goed jouw huidige setup werkt als je dropdown boxes, radio knoppen en checkboxes wilt toevoegen.
@Wouter en Gerard,
Kunnen jullie me een klein beetje op weg helpen dmv een goed formulier voorbeeldje?
@wouter
lijstje:
form start
form end
input fields
select
button
Kunnen jullie me een klein beetje op weg helpen dmv een goed formulier voorbeeldje?
@wouter
lijstje:
form start
form end
input fields
select
button
Gewijzigd op 05/11/2012 14:31:21 door Bas D L
Bas, al redelijk in de buurt. Als je het globaal neemt zou ik dit zeggen:
- FormRenderer (deze maakt de HTML van het formulier)
- FormElement (alle mogelijke elementen voor een formulier)
- FormBuilder (creëert een formulier)
Vervolgens heeft elke verantwoordelijkheid weer meerdere klassen. Zo kan je een HTMLFormRenderer maken of een andere formrenderer, kan zo snel even niks verzinnen. En een InputElement en een SelectElement die weer heel veel OptionElement klassen heeft en een ButtonElement.
De code wordt dan:
In FormBuilder::add() maak je dan gebruik van de InputElement ect. om een element toe te voegen.
- FormRenderer (deze maakt de HTML van het formulier)
- FormElement (alle mogelijke elementen voor een formulier)
- FormBuilder (creëert een formulier)
Vervolgens heeft elke verantwoordelijkheid weer meerdere klassen. Zo kan je een HTMLFormRenderer maken of een andere formrenderer, kan zo snel even niks verzinnen. En een InputElement en een SelectElement die weer heel veel OptionElement klassen heeft en een ButtonElement.
De code wordt dan:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$formBuilder = new FormBuilder();
$formBuilder
->add('name', 'text')
->add('message', 'textarea')
;
$formFactory = new HTMLFormFactory($formBuilder);
echo $formFactory->render();
?>
$formBuilder = new FormBuilder();
$formBuilder
->add('name', 'text')
->add('message', 'textarea')
;
$formFactory = new HTMLFormFactory($formBuilder);
echo $formFactory->render();
?>
In FormBuilder::add() maak je dan gebruik van de InputElement ect. om een element toe te voegen.
@Wouter,
Krijg je dan zo'n klasse-indeling?
class FormRenderHtml
{
}
class FormRenderElement
{
}
class FormBuilder
{
}
Krijg je dan zo'n klasse-indeling?
class FormRenderHtml
{
}
class FormRenderElement
{
}
class FormBuilder
{
}
Dan ga je werken met overerving. Dat betekend dat 1 klasse alles van de andere klasse bevat, maar dat kan bewerken. Dat doe je met het extends keyword (wat uitbreiden betekend). Bijvoorbeeld:
Dit ga je nu ook gebruiken in dit geval. Je hebt een hoofdklasse die je FormRenderer noemt. Deze klasse bevat alle functies die in elke renderer gelijk zijn. Vervolgens breiden we deze klasse uit in een andere klasse als HTMLFormRenderer die de methoden bevat speciaal voor een HTML form. Voorbeeldje:
Het is goed mogelijk dat je iets niet begrijpt, zou je dan aub gericht willen uitleggen wat je niet begrijpt dan kunnen we je verder helpen om het wel te begrijpen.
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
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
<?php
class A
{
public function foo()
{
return 'Foo!!';
}
}
class B
{
public function bar()
{
return 'Bar!!';
}
}
$a = new A();
echo $a->foo(); // Foo!!
$b = new B();
echo $b->bar(); // Bar!!
// klasse C breidt klasse A uit, het krijgt alleen methoden en properties
class C extends A
{
public function baz()
{
return 'Baz!!';
}
}
$c = new C();
$c->foo(); // doordat C de A klasse uitbreid heb je gewoon toegang tot de methoden van A
$c->baz(); // maar ook zijn eigen methoden werken
// je kan ook methoden veranderen:
class D extends B
{
// we 'overwriten' de bar() functie in B
public function bar()
{
return 'Bar from class D!!';
};
}
$d = new D();
echo $d->bar(); // deze roept de nieuwe methode aan in class D
?>
class A
{
public function foo()
{
return 'Foo!!';
}
}
class B
{
public function bar()
{
return 'Bar!!';
}
}
$a = new A();
echo $a->foo(); // Foo!!
$b = new B();
echo $b->bar(); // Bar!!
// klasse C breidt klasse A uit, het krijgt alleen methoden en properties
class C extends A
{
public function baz()
{
return 'Baz!!';
}
}
$c = new C();
$c->foo(); // doordat C de A klasse uitbreid heb je gewoon toegang tot de methoden van A
$c->baz(); // maar ook zijn eigen methoden werken
// je kan ook methoden veranderen:
class D extends B
{
// we 'overwriten' de bar() functie in B
public function bar()
{
return 'Bar from class D!!';
};
}
$d = new D();
echo $d->bar(); // deze roept de nieuwe methode aan in class D
?>
Dit ga je nu ook gebruiken in dit geval. Je hebt een hoofdklasse die je FormRenderer noemt. Deze klasse bevat alle functies die in elke renderer gelijk zijn. Vervolgens breiden we deze klasse uit in een andere klasse als HTMLFormRenderer die de methoden bevat speciaal voor een HTML form. Voorbeeldje:
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
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
<?php
class FormRenderer
{
private $builder;
public function __construct(FormBuilder $builder)
{
$this->setBuilder($builder);
}
public function setBuilder(FormBuilder $builder)
{
$this->builder = $builder;
}
public function getBuilder()
{
return $this->builder;
}
}
class HTMLFormRenderer extends FormRenderer
{
public function render()
{
$builder = $this->getBuilder();
$html = '<form>';
foreach ($builder->getElements() as $element) {
$html .= $element->render();
}
$html = '</form>';
return $html;
}
}
?>
class FormRenderer
{
private $builder;
public function __construct(FormBuilder $builder)
{
$this->setBuilder($builder);
}
public function setBuilder(FormBuilder $builder)
{
$this->builder = $builder;
}
public function getBuilder()
{
return $this->builder;
}
}
class HTMLFormRenderer extends FormRenderer
{
public function render()
{
$builder = $this->getBuilder();
$html = '<form>';
foreach ($builder->getElements() as $element) {
$html .= $element->render();
}
$html = '</form>';
return $html;
}
}
?>
Het is goed mogelijk dat je iets niet begrijpt, zou je dan aub gericht willen uitleggen wat je niet begrijpt dan kunnen we je verder helpen om het wel te begrijpen.
Gewijzigd op 05/11/2012 15:18:40 door Wouter J
Onderstaand snap ik niet :-(
1. public function __construct(FormBuilder $builder) |--> FormBuilder $builder
2. Waar is de class FormRenderer?
1. public function __construct(FormBuilder $builder) |--> FormBuilder $builder
2. Waar is de class FormRenderer?
Quote:
1. public function __construct(FormBuilder $builder) |--> FormBuilder $builder
Door er FormBuilder voor te zetten eisen we dat de variabele $builder als waarde een instance van de FormBuilder bevat. Wat minder ingewikkeld met voorbeelden:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class A
{
}
class B
{
public function foo(A $object)
{
// ...
}
}
$b = new B();
$b->foo('Hello'); // geeft error, de parameter $object moet een instance van A zijn
$b->foo(new A()); // correct, de parameter $object is nu een instance van A
$a = new A();
$b->foo($a); // correct, de parameter $object is een instance van A (omdat $a een instance van A is)
?>
class A
{
}
class B
{
public function foo(A $object)
{
// ...
}
}
$b = new B();
$b->foo('Hello'); // geeft error, de parameter $object moet een instance van A zijn
$b->foo(new A()); // correct, de parameter $object is nu een instance van A
$a = new A();
$b->foo($a); // correct, de parameter $object is een instance van A (omdat $a een instance van A is)
?>
Quote:
2. Waar is de class FormRenderer?
Dat was een typfout van mij, ik heb het nu aangepast
Dus bij 1. stop je als het ware class a in class b?
Wat ik erg lastig vind is hoe ik dan nu een class FormBuilder moet maken.
Wat ik erg lastig vind is hoe ik dan nu een class FormBuilder moet maken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
class FormBuilder
{
public function __construct( $FieldType , $FieldName , $FieldValue , $FieldChecked ){
$this->_FieldType = $FieldType;
$this->_FieldName = $FieldName;
$this->_FieldValue = $FieldValue;
$this->_FieldChecked = $FieldChecked;
}
public function getElements(){
return '<input type="' . $this->_FieldType . '" name="' . $this->_FieldName . '" value="' . $this->_FieldValue . '" ' . $this->_FieldChecked . '>'. PHP_EOL;
}
}
{
public function __construct( $FieldType , $FieldName , $FieldValue , $FieldChecked ){
$this->_FieldType = $FieldType;
$this->_FieldName = $FieldName;
$this->_FieldValue = $FieldValue;
$this->_FieldChecked = $FieldChecked;
}
public function getElements(){
return '<input type="' . $this->_FieldType . '" name="' . $this->_FieldName . '" value="' . $this->_FieldValue . '" ' . $this->_FieldChecked . '>'. PHP_EOL;
}
}
Gewijzigd op 05/11/2012 15:30:43 door Bas D L
Ja, je stopt class A in B en vanuit daar kun je hem gewoon gebruiken. FormBuilder ziet er niet zo uit. Want je stopt nu weer 2 verantwoordelijkheden in elkaar. Welke 3 hadden we nou net?
1) Builder
2) Elements
3) Renderer
De Elements zijn een veld, die bezitten dus al die eigenschappen. In de FormBuilder klasse hou je nu een array bij met alle elementen erin en die geef je terug met getElements().
1) Builder
2) Elements
3) Renderer
De Elements zijn een veld, die bezitten dus al die eigenschappen. In de FormBuilder klasse hou je nu een array bij met alle elementen erin en die geef je terug met getElements().
Gewoon zoiets:
@wouter, is het zo hoe het moet?
$formBuilder->addName('test 1');
$formBuilder->addTypes('text');
$formBuilder->addName('test 2');
$formBuilder->addTypes('text');
Hoe kan ik trouwens simpeler maken?
$formBuilder->addName('test 1');
$formBuilder->addTypes('text');
$formBuilder->addName('test 2');
$formBuilder->addTypes('text');
Hoe kan ik trouwens simpeler maken?
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
77
78
79
80
81
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
77
78
79
80
81
<?php
class FormBuilder
{
private $name = array();
private $types = array();
public function addName($element)
{
$this->name[] = $element;
}
public function getName()
{
return $this->name;
}
public function addTypes($type)
{
$this->types[] = $type;
}
public function getTypes()
{
return $this->types;
}
}
class FormRenderer extends FormBuilder
{
private $builder;
public function __construct($builder)
{
$this->setBuilder($builder);
}
public function setBuilder($builder)
{
$this->builder = $builder;
}
public function getBuilder()
{
return $this->builder;
}
}
class HTMLFormFactory extends FormRenderer
{
public function render()
{
$builder = $this->getBuilder();
$html .= '<form>';
print_r($builder->getName());
$html .= '<input ';
foreach ($builder->getName() as $name) {
$html .= 'name="'.$name.'" ';
foreach ($builder->getTypes() as $types) {
$html .= 'type="'.$types.'">';
}
}
$html .= '</form>';
return $html;
}
}
$formBuilder = new FormBuilder();
$formBuilder->addName('test 1');
$formBuilder->addTypes('text');
$formBuilder->addName('test 2');
$formBuilder->addTypes('text');
$formFactory = new HTMLFormFactory($formBuilder);
echo $formFactory->render();
?>
class FormBuilder
{
private $name = array();
private $types = array();
public function addName($element)
{
$this->name[] = $element;
}
public function getName()
{
return $this->name;
}
public function addTypes($type)
{
$this->types[] = $type;
}
public function getTypes()
{
return $this->types;
}
}
class FormRenderer extends FormBuilder
{
private $builder;
public function __construct($builder)
{
$this->setBuilder($builder);
}
public function setBuilder($builder)
{
$this->builder = $builder;
}
public function getBuilder()
{
return $this->builder;
}
}
class HTMLFormFactory extends FormRenderer
{
public function render()
{
$builder = $this->getBuilder();
$html .= '<form>';
print_r($builder->getName());
$html .= '<input ';
foreach ($builder->getName() as $name) {
$html .= 'name="'.$name.'" ';
foreach ($builder->getTypes() as $types) {
$html .= 'type="'.$types.'">';
}
}
$html .= '</form>';
return $html;
}
}
$formBuilder = new FormBuilder();
$formBuilder->addName('test 1');
$formBuilder->addTypes('text');
$formBuilder->addName('test 2');
$formBuilder->addTypes('text');
$formFactory = new HTMLFormFactory($formBuilder);
echo $formFactory->render();
?>
Gewijzigd op 05/11/2012 18:58:08 door Bas D L
Is het niet handig om ook nog validatie in het oog te houden?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$form = new Form();
$input = new Form_Element_Input('eenveldnaam');
$input->setRequired(true)
->setMinLength(5);
$form->addElements(array($input));
?>
$form = new Form();
$input = new Form_Element_Input('eenveldnaam');
$input->setRequired(true)
->setMinLength(5);
$form->addElements(array($input));
?>
@Bo, helemaal eens.
Weet jij hoe ik deze code kan verkleinen? Zie bovenstaande classes
Weet jij hoe ik deze code kan verkleinen? Zie bovenstaande classes
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$formBuilder->addName('test 1');
$formBuilder->addTypes('text');
$formBuilder->addName('test 2');
$formBuilder->addTypes('text');
?>
$formBuilder->addName('test 1');
$formBuilder->addTypes('text');
$formBuilder->addName('test 2');
$formBuilder->addTypes('text');
?>
Gewijzigd op 05/11/2012 19:53:15 door Bas D L
Bas, na mijn mening doe je nu toch totaal iets anders als waar we toenet mee geëindigd zijn? De FormBuilder heeft toch geen name en type als eigenschappen? Zijn dat niet de eigenschappen een FormElement?
Bo, dat hoort niet gedaan te worden door een Form klasse en ook niet door een FormElement klasse. Daar heb je speciale Validator klassen voor nodig.
Bo, dat hoort niet gedaan te worden door een Form klasse en ook niet door een FormElement klasse. Daar heb je speciale Validator klassen voor nodig.




