13 Wochen Projekt – ZEND Framework Projekt (Woche 8)

Die letzte Woche war ziemlich voll und so habe ich es nur an einem Tag geschafft, mich weiter mit dem ZEND Framework zu beschäftigen. Ich habe eine neue Komponente ausprobiert, aber von einem fertigen Projekt bin ich leider noch weit entfernt. Daher beschränke ich mich diesmal auf eine kurze Vorstellung der neuen Komponente Zend_Form und suche Ausreden, warum ich nicht so weit gekommen bin, wie ich geplant hatte.

Was ist das Problem mit Formularen?

Jeder Entwickler, der zum ersten Mal ein einfaches Kontaktformular erstellen will stellt fest, dass dies komplizierter ist als gedacht. Zunächst muss das HTML-Formular selbst erstellt werden.

Dann müssen die abgeschickten Daten validiert werden. Gibt es Fehler, muss das Formular dem User mit einer entsprechenden Meldung erneut vorgelegt werden. Dabei soll der User jedoch nicht alles neu eingeben müssen. Also müssen die Felder mit den eingegebenen Werten vorbelegt werden. Bei der richtigen Eingabe müssen die Daten verarbeitet werden, und dem User eine Erfolgsmeldung vorgelegt werden. Das Formular muss dann ausgeblendet oder ohne vorbelegte Felder angezeigt werden.

Diesen unnötig komplizierten und vor allem immer sehr ähnlichen Ablauf versucht die Klasse Zend_Form zu vereinfachen.

Wie funktioniert Zend_Form?

Achtung, jetzt wird es ein wenig technisch und nur noch für Entwickler interessant. Alle anderen können zur nächsten Überschrift springen.

Ein Objekt der Klasse Zend_Form repräsentiert ein Formular (Überraschung). Diesem kann man beliebig viele Felder anhängen. Hier ein einfaches Beispiel für ein Registrierungsformular:

$form = new Zend_Form(); //neues Formular
$form->setMethod('post'); //POST-Formular
$form->setAction(''); //Ziel der Formulardaten, in diesem Fall identisch mit der URL des Formulars

$form->addElement('text', 'username'); //neues Textfeld mit dem Namen username
$form->vorname->setLabel('Username'); //Beschriftung des Felds
$form->vorname->setRequired(true); //Pflichtfeld

$form->addElement('text', 'email'); //neues Textfeld für die E-Mail-Adresse
$form->email->setLabel('E-Mail'); //Beschriftung des Felds
$form->email->setRequired(true); //Pflichtfeld
$valEmail = new Zend_Validate_EmailAddress(); //eingebaute E-Mail-Validierung
$valEmail->setMessage('Fehlerhafte E-Mail-Adresse.'); //Fehlermeldung
$form->email->addValidator($valEmail); //E-Mail-Validierung anhängen

$form->addElement('submit', 'Registrieren'); //Submit-Button

//Das Formular soll nur ausgegeben werden, wenn es noch nicht abgeschickt wurde, oder es einen Fehler gab

if (!$this->_request->isPost() || !$form->isValid($_POST)) {
    echo $form; //Formular ausgeben, hier zum Test per echo, normalerweise per View
}

else {
    //Validierung erfolgreich, Verarbeitung der Daten
    $username = $form->getValue('username');
    $email = $form->getValue('email');

    //Speicherung in der Datenbank, etc.

}

Dies ist der vollständige Code, für die oben beschriebenen Schritte. Um die Default-Werte und die Ausgabe der entsprechenden Fehlermeldungen kümmert sich das Framework selbst. Neben der E-Mail-Validierung gibt es natürlich noch viele andere eingebaute Validatoren, um beispielsweise mit regulären Ausdrücken zu validieren.

Zend Form

Die Ausgabe des ZEND Formulars.

Fazit

Die Zend Formulare können die Arbeit erheblich vereinfachen und redundante Arbeit sparen. In zukünftigen Projekten werde ich diese sicherlich mal einsetzen. Für ein Beispielprojekt, welches vollständig auf das ZEND Framework setzt, reicht das alles jedoch noch nicht aus. Dies liegt einerseits daran, dass ich in der letzten Woche wenig Zeit gefunden habe und andererseits daran, dass die Vorstellung des ZEND Framework in dem PHP-Buch, welches ich momentan durcharbeite doch deutlich kürzer ausgefallen ist, als ich gedacht hatte. Ich werde mir für das ZEND Framework wohl mal ein eigenes Buch zulegen müssen, wo es um nichts anderes geht.

In dieser Woche möchte ich einen Glossar mit technischen Begriffen aus der Webentwicklung erstellen. Das Ziel dabei ist, dass auch Nicht-Entwickler mit den Begriffen etwas anfangen können und zukünftig Erklärungen von Entwicklern besser folgen und Probleme nachvollziehen können.

3 thoughts on “13 Wochen Projekt – ZEND Framework Projekt (Woche 8)
  1. Hallo Jonas,

    scheint ja als ob das Erstellen von (einfachen) Forms in Zend nicht so kompliziert ist. Gibt es aber auch eine einfache Möglichkeit, dass ich für die Forms individuelle Templates erstellen kann? Würde mir da jetzt so was in der Art vorstellen:

    $form->setTemplate(‚my-form-template‘);

    oder muss man dafür dann eine neue Klasse schreiben, die dann von Zend_Form erbt?

    Gruß Stephan

  2. Danke für den Link!

    Habe es mal überflogen, aber so auf den ersten Blick kann ich dem (noch) nichts abgewinnen. So was wie:

    protected $_format = ‚%s‘
    . “;

    finde ich dann irgendwie immer gewöhnungsbedürftig. Da bevorzuge ich dann doch lieber den Einsatz von Templates, wo ich dann den ganzen HTML-Code einfügen kann, um die Daten und deren Präsentation besser voneinander zu trennen.

    Glaube ich bin schon zu sehr an Ruby on Rails bzw. CakePHP gewöhnt. 😛 Wobei ich denke, dass wenn man sich mit Zend ein bisschen mehr beschäftigt, dass gar nicht soooo schlimm ist.

    Grüße Stephan

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert