[WIP!] Formulier
Formulier is een klasse die gebruikt kan worden om formulieren op te bouwen en te valideren. Alle bestanden gerelateerd aan Formulier zijn te vinden in lib/view/formulier
. Een formulier kan een hele pagina in beslag nemen, in een smarty template voorkomen of als popup gebruikt worden.
Fields
Velden zijn te vinden in FormElement.abstract.php
, FormKnoppen.class.php
, GetalVelden.class.php
, InvoerVelden.class.php
, KeuzeVelden.class.php
en UploadVelden.class.php
.
FormElement
HtmlComment
Een stuk losse HTML in het formulier.
| $comment
| De HTML | | ———- | ——- |
$fields[] = new HtmlComment('<strong>Dit gedeelte is belangrijk</strong>');
HtmlBbComment
Een stuk losse HTML met mogelijke BBCode in het formulier
| $comment
| De HTML | | ———- | ——- |
$fields[] = new HtmlBbComment('[b]Dit gedeelte is belangrijk[/b]');
FieldSet
Het begin van een nieuwe fieldset, alle volgende elementen zitten in deze FieldSet, totdat een veld new HtmlComment('</fieldset>');
volgt.
| $titel
| De titel van de fieldset | | ——– | ———————— |
$fields[] = new FieldSet('Adres');
...
$fields[] = new HtmlComment('</fieldset>');
SubKopje
Maak een subkopje aan, de standaard is <h3>
. De eigenschap $h
kan gebruikt worden om dit aan te passen.
| $tekst
| De inhoud van de titel | | ——– | ———————- |
$subkopje = new SubKopje('Persoonlijke gegevens');
$subkopje->h = 2;
$fields[] = $subkopje;
CollapsableSubKopje
Maak een Subkopje met alles eronder collapsable, moet afgesloten worden met new HtmlComment('</div>');
$id | De id gebruikt in de JavaScript |
$titel | De titel van het kopje |
$collapsed = false | Of het subkopje collapsed is bij laden |
$single = false | Of andere kopjes ook ingeklapt moeten worden |
$hover_click = false | Of het kopje moet uitklappen bij hover |
$animate = true | Of het uitklappen geanimeerd moet zijn |
$fields[] = new CollapsableSubKopje('optioneel', 'Optionele gegevens', true);
...
$fields[] = new HtmlComment('</div>');
InvoerVelden
(Required)TextField
Een normaal <input type="text".../>
veld.
$name | Naam van de input, gebruikt om waarde op te halen met POST |
$value | Waarde van de input |
$description | Beschrijving, bij mouse-over |
$max_len = 255 | Maximale lengte van de input |
$min_len = 0 | Minimale lengte van de input |
$model = null | Ongebruikt |
$fields[] = new TextField(
'voornaam',
'Voornaam',
'Vul hier je voornaam in',
255,
2
);
$fields[] = new RequiredTextField(
'achternaam',
'Achternaam',
'Vul hier je achternaam in',
255,
2
);
(Required)FileNameField
Zie TextField, valideert of een TextField een geldige bestandsnaam bevat.
$fields[] = new FileNameField('foto', 'Foto', 'Geef de foto een naam');
$fields[] = new RequiredFileNameField('album', 'Album', 'Geef een albumnaam');
(Required)LandField
Zie TextField, geeft suggesties voor landen: ‘Nederland’, ‘België’, ‘Duitsland’, ‘Frankrijk’, ‘Verenigd Koninkrijk’, ‘Verenigde Staten’.
$fields[] = new LandField('geboorteland', 'Geboorteland', '');
$fields[] = new RequiredLandField('land', 'Land', '');
(Required)RechtenField
Zie TextField, geeft suggesties voor specifieke rechtengroepen en valideert deze.
$fields[] = new RechtenField('maglezen', 'Mag lezen', '');
$fields[] = new RequiredRechtenField('magschrijven', 'Mag schrijven', '');
(Required)LidField
Zie TextField, geeft suggesties voor leden. Opties zijn ‘leden’, ‘oudleden’, ‘novieten’, ‘alleleden’, ‘allepersonen’, ‘nobodies’.
$name | Naam van de input |
$value | Beginwaarde van de input |
$description | Beschrijving, bij mouse-voer |
$zoekin = 'alleleden' | Groep om in te zoeken |
$fields[] = new LidField('lid', 'Lid', '');
$fields[] = new RequiredLidField('noviet', 'Noviet', '', 'novieten');
HtmlComment | $html | |
HtmlBbComment | ||
FieldSet | ||
Subkopje | ||
CollapsableSubKopje | ||
(Required)TextField | ||
(Required)FileNameField | ||
(Required)EntityField | ||
StudieField | ||
(Required)EmailField | ||
(Required)UrlField | ||
(Required)UsernameField | ||
(Required)DuckField | ||
(Required)TextareaField | ||
(Required)WachtwoordField | ||
(Required)WachtwoordWijzigenField | ||
(Required)IntField | ||
(Required)BedragField | ||
(Required)TelefoonField | ||
(Required)FloatField | ||
(Required)ColorField | ||
(Required)SelectField | ||
MultiSelectField | ||
(Required)EntityDropDown | ||
(Required)WeekdagField | ||
(Required)VerticaleField | ||
(Required)KerkField | ||
(Required)RadioField | ||
(Required)GeslachtField | ||
(Required)JaNeeField | ||
(Required)DateField | ||
(Required)TimeField | ||
(Required)CheckboxField | ||
(Required)DateTimeField | ||
(Required)SterrenField | ||
(Required)FileField | ||
(Required)ImageField | ||
BestandBehouden | ||
UploadFileField | ||
ExistingFileField | ||
DownloadUrlField |
Voorbeeld
class MijnForm extends Forumulier {
function __construct(Voorbeeld $model) {
parent::__construct($model, '/voorbeeld/', false, true);
$fields[] = new RequiredTextField('voornaam', $model->voornaam, 'Voornaam');
$fields[] = new TextField('achternaam', $model->voornaam, 'Achternaam');
$fields[] = new RequiredTextField('verhaal', $model->verhaal, 'Verhaal');
$fields['btn'] = new FormDefaultKnoppen();
$this->addFields($fields);
}
}
class VoorbeeldController extends Controller {
...
public function voorbeeld() {
if ($this->isPosted()) {
$voorbeeld = new Voorbeeld();
$voorbeeld->voornaam = filter_input(INPUT_POST, 'voornaam', FILTER_SANITIZE_STRING);
$voorbeeld->achternaam = filter_input(INPUT_POST, 'achternaam', FILTER_SANITIZE_STRING);
$voorbeeld->verhaal = filter_input(INPUT_POST, 'verhaal', FILTER_SANITIZE_STRING);
$form = new MijnForm($voorbeeld);
if ($form->validate()) {
VoorbeeldModel::instance()->create($voorbeeld);
MeldingUtil::setMelding("Voorbeeld met succes aangemaakt", 1);
$this->view = new MijnForm(new Voorbeeld());
} else {
$this->view = $form;
}
} else {
$this->view = new MijnForm(new Voorbeeld());
}
}
}