Nette form afhandeling OOP
Ik heb een klein voorbeeld gemaakt van hoe ik later een formulier wil maken, volledig in OOP.
Ik heb veel afgekeken van het Zend framework, omdat dat ook heel goed in elkaar zit.
Wat vinden jullie hiervan?
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
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
<?php
$form = new Form;
$form->setMethod("post");
// voorbeeld
$form->addElement("textfield", "firstname", array(
"attributes" => array("id" => "firstname_id", "size" => 30),
"filters" => array("trim", "capitalize"),
"validation" => array("empty"),
"validation" => array("noNumbers"),
"validation" => array("length" => array(3, 30));
"validation" => array("regexp" => "/[a-zA-Z]/");
"errors" => array(
"Vul een naam in",
"De naam mag geen nummers bevatten",
"Vul minimaal 3 tekens, en maximaal 30 tekens in",
"Deze naam is ongeldig"
);
)
);
?>
$form = new Form;
$form->setMethod("post");
// voorbeeld
$form->addElement("textfield", "firstname", array(
"attributes" => array("id" => "firstname_id", "size" => 30),
"filters" => array("trim", "capitalize"),
"validation" => array("empty"),
"validation" => array("noNumbers"),
"validation" => array("length" => array(3, 30));
"validation" => array("regexp" => "/[a-zA-Z]/");
"errors" => array(
"Vul een naam in",
"De naam mag geen nummers bevatten",
"Vul minimaal 3 tekens, en maximaal 30 tekens in",
"Deze naam is ongeldig"
);
)
);
?>
Ik vind het wel niet nodig om de HTML van een formulier te laten maken door PHP, dus de "elements" in het PHP gedeelte zijn een soort denkbeeldig element. De HTML is gewoon hard-coded in het HTML gedeelte.
Ik was eerst van plan om voor elk element een apart object te maken, en een Validatie object.
Dan zou je zo iets krijgen:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$form = new Form;
$form->setMethod("post");
$nameField = new TextBar("firstname"); // name attribute van element (in constructor)
$nameField->addAttribute("id", "first-name-id");
$nameField->addFilter("trim", "capitalize");
$validator = new Validator;
// Volgorde bepaalt welke voorwaarde voorgaat
// Als het veld leeg is, hoeft er niet gecontroleerd te
// worden op lengte
$validator->addValidation("empty");
$validator->addValidation("length", array(3, 30));
// Volgorde bepaalt welke tekst bij welke controle hoort
$nameField->addErrorText("Vul een naam in");
$nameField->addErrorText("Te kort of te lang");
$nameField->setValidator($validator);
?>
$form = new Form;
$form->setMethod("post");
$nameField = new TextBar("firstname"); // name attribute van element (in constructor)
$nameField->addAttribute("id", "first-name-id");
$nameField->addFilter("trim", "capitalize");
$validator = new Validator;
// Volgorde bepaalt welke voorwaarde voorgaat
// Als het veld leeg is, hoeft er niet gecontroleerd te
// worden op lengte
$validator->addValidation("empty");
$validator->addValidation("length", array(3, 30));
// Volgorde bepaalt welke tekst bij welke controle hoort
$nameField->addErrorText("Vul een naam in");
$nameField->addErrorText("Te kort of te lang");
$nameField->setValidator($validator);
?>
Deze tweede optie is een heel stuk langer, maar lijkt me meer OOP achtig. Maar als je zou kijken naar Zend, dan doen ze het daar niet.
Zie ook deze link: http://framework.zend.com/manual/1.12/en/learning.quickstart.create-form.html
Gewijzigd op 26/11/2013 15:00:37 door Jan terhuijzen
PS: In de PHP wereld staat de Symfony Form component bekent als een van de beste, misschien een aanrader om daar eens naar te kijken.
Ziet er mooi uit, maar is erg ingewikkeld