Beste allemaal,

Ik heb eindelijk mijn eerste (werkende!) class kunnen maken. Werd tijd :-P. Ben er dus ook super trots op, al stelt het voor de meesten van jullie natuurlijk weinig voor.

Ik wilde aan jullie vragen of jullie nog tips/verbeteringen/opmerkingen/aanmerkingen/commentaar/kritiekpuntjes hadden en of jullie zo vriendelijk willen zijn deze te melden. Al zal dat kritiek niet zo moeilijk zijn tegenwoordig, haha :-P.

(Geef overigens ook even je mening over de lay-out van mijn geweldige scriptlib, zelf via htaccess enzo gemaakt :-P.)

http://www.dzjemo.nl/phphulp/formcreator.php

Ik hoor het wel!

Jezpur
Juist als je OOP zo geweldig vindt is het leuk om eens de richting op te gaan van Zend_Form: Voor ieder element een eigen class. Op die manier kan je logica die specifiek voor select of input[type=radio] is in hun eigen class houden, en kan je nieuwe (of hergebruikte, maar opnieuw opgemaakte) form-elementen toevoegen zonder classes te hoeven veranderen. Iets a la:

<?php
class Form
- addField(Field $field)
- draw()

abstract class Field
- setValue()
- setAttribute()
- draw() (wordt aangeroepen door Form::draw)

class TextField extends Field
- setPlaceholder($text)
- draw() (overschrijven, zodat je specifiek input[type=text] kan teruggeven)

$x = new Form;

$naam = new TextField('Voornaam');
$naam->setPlaceholder('Vul hier je voornaam in');

// dit kan je ook onderbrengen in de class zelf
if(isset($_POST['naam']))
$naam->setValue($_POST['naam']);

$x->addField($naam);

$x->draw();
?>
Hm.. Ja, Zend is me wat. Heb het hele zooitje op m'n pc staan omdat ik Zend_Db gebruik bij een van m'n websites, daar ondersteunde men nog geen PDO.... Nja, dat terzijde: ik zal eens de documentatie van Zend_Form door gaan nemen, misschien dat ik dat dan voortaan wel ga gebruiken om een formulier te maken :-).
Naja, je hoeft niet specifiek Zend_Form te bekijken, je kan ook kijken naar FormHandler of een ander "groot" form-hulpje-script-ding-achtig-iets. Ik denk dat ze allemaal wel op zo'n soort manier met meerdere classes, en classes specifiek voor bepaalde elementen zullen werken.
Maar is het niet de hele bedoeling van OOP dat al je gegevens die je opslaat, een soort object word.
Dus je krijgt bijvoorbeeld een abstracte class met input o.i.d.
Die geef je bepaalde methodes en variablen mee, die voor iedere class verplicht zijn, en dan maak je dus allemaal overerfende classes voor een textfield enzo.
En dat je dan een class form heeft, waarmee je het hele form kan gaan bouwen.
(dus eigenlijk wat in Jelmer z'n voorbeeld code staat )
Ik mis het spannendste gedeelte namelijk het controleren van de gegevens en het wegschrijven naar DB of email
Wat verbeterpunten van je class:
- haal de echo uit outputForm(). Return gewoon het resultaat.
- probeer de velden op te bouwen door middel van DOM. Hierdoor is het makkelijk om attributen / waardes toe te voegen. Bovendien verkleint dit de kans op fouten én is het XHTML valid.

Ikzelf heb (naast een soortgelijke implementatie als Jelmer geeft) nog methodes addValidator en addFilter, die je op de velden kan loslaten. Als elke validator succesvol valideert is het formulier correct.
Je zou eventueel een onComplete methode kunnen toevoegen, die een actie (callback) doet als het formulier correct is (zoals het wegschrijven naar een DB).

Daarnaast, als je het helemaal doorvoert (MVC-achtig), is het wellicht logisch om een View object te retourneren als je draw() aanroept. Ikzelf twijfel nog hoe ik dat in mijn eigen formulierklasse kan / ga implementeren.

Een goede formulierklasse is ingewikkelder dan je denkt, maar ook een mooie uitdaging! Leesvoer.
Ik ben toevallig ook bezig aan een form class.
Ik probeer nu ook te zorgen dat ik events kan toevoegen (onClick, onChange, ...); dat, buiten de html van het formulier, ook een insert string wordt gebouwd met de juiste velden, met de $_POST ingewerkt; dat de juiste waarden in javascript worden gelezen en doorgegeven aan een functie die alles met Ajax opstuurt.

Het begint mooi te werken, maar er is nog een hoop werk aan.
als je het helemaal mooi wilt doen moet je de form kunnen bouwen aan de hand van de eigenschappen van de in een SQL statement gevraagde columns
Hm, ik denk dat ik hem nog wel ietsjes ga uitbouwen. In ieder geval een validatie er op :-).
Klaasjan Boven schreef op 30.04.2009 11:16
als je het helemaal mooi wilt doen moet je de form kunnen bouwen aan de hand van de eigenschappen van de in een SQL statement gevraagde columns


Uhm, ik doe zo ongeveer het omgekeerde, maar je hebt wel een punt.

Met een sql dump, waar de CREATE TABLE op staat, moet dat wel lukken.

Reageren