» Tipps und Tricks » Zend Form Hack

Zend Form Hack

Zend Form Hack

Wer mit dem Zend Framework arbeitet, verwendet natürlich auch die Klasse Zend_Form zum Erstellen von Formularen. Rob Allen, aktiver Entwickler am Zend Framework und Author des Buches Zend Framework in Action, veröffentlich auf seinem Blog in regelmässigen Abständen wissenswerte Tutorials zum Einsatz der unterschiedlichen Komponenten des Zend Frameworks. Ausgehend von Rob Allens Artikel Simple Zend Form Sample möchte ich nachfolgend eine Verbesserung von Robs Vorgehensweise ausfzeigen.

In seinem Beispiel erstellt Rob ein Kontaktformular. Dieses Formular wird innerhalb der Klasse forms_ContactForm erstellt. Rob baut sein Formular dabei nach folgendem Schema auf:

class forms_ContactForm extends Zend_Form
{
    public function __construct($options = null)
    {
        parent::__construct($options);
        $this->setName('contact_us');
       
        $title = new Zend_Form_Element_Select('title');
        $title->setLabel('Title')
              ->setMultiOptions(array('mr'=>'Mr', 'mrs'=>'Mrs'))
              ->setRequired(true)->addValidator('NotEmpty', true);
       
        $firstName = new Zend_Form_Element_Text('firstName');
        $firstName->setLabel('First name')
                  ->setRequired(true)
                  ->addValidator('NotEmpty');

        $lastName = new Zend_Form_Element_Text('lastName');
        $lastName->setLabel('Last name')
                 ->setRequired(true)
                 ->addValidator('NotEmpty');
            
        $email = new Zend_Form_Element_Text('email');
        $email->setLabel('Email address')
              ->addFilter('StringToLower')
              ->setRequired(true)
              ->addValidator('NotEmpty', true)
              ->addValidator('EmailAddress');
             
        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setLabel('Contact us');
       
        $this->addElements(array($title, $firstName,
            $lastName, $email, $submit));
       
    }
}

Als ich anfing mit dem Zend Framework zu arbeiten, erstellte ich meine Formulare exakt nach diesem Schema. Allerdings störte es mich, dass ich Änderungen der Formularelemente immer an mehreren Stellen durchführen musste. Zum einen muss das Formular-Element definiert werden. Um diese Definition kommt man nicht herum. Nun muss das ebtsprechende Element allerdings noch im Formular eingehängt werden. Dies geschicht bei Rob in der letzten Zeite mittels $this->addElements(array(...)). Ich überlegte, wie ich diese zusätzliche Definition umgehen könnte und fand bei die Lösung des Problems in der Welt von Arrays. Nachfolgend nun der Aufbau meines Formulars:

class forms_ContactForm extends Zend_Form
{
    public function __construct($options = null)
    {
        parent::__construct($options);
        $this->setName('contact_us');
       
        $form['title'] = new Zend_Form_Element_Select('title');
        $form['title']->setLabel('Title')
              ->setMultiOptions(array('mr'=>'Mr', 'mrs'=>'Mrs'))
              ->setRequired(true)->addValidator('NotEmpty', true);
       
        $form['firstName'] = new Zend_Form_Element_Text('firstName');
        $form['firstName']->setLabel('First name')
                  ->setRequired(true)
                  ->addValidator('NotEmpty');

        $form['lastName'] = new Zend_Form_Element_Text('lastName');
        $form['lastName']->setLabel('Last name')
                 ->setRequired(true)
                 ->addValidator('NotEmpty');
            
        $form['email'] = new Zend_Form_Element_Text('email');
        $form['email']->setLabel('Email address')
              ->addFilter('StringToLower')
              ->setRequired(true)
              ->addValidator('NotEmpty', true)
              ->addValidator('EmailAddress');
             
        $form['submit'] = new Zend_Form_Element_Submit('submit');
        $form['submit']->setLabel('Contact us');
       
        $this->addElements($form));
       
    }
}

Im Großen und Ganzen unterscheidet sich meine Variante nur gering von Rob's Variante. Allerdings lassen sich bei meiner Variante die einzelnen Elemente beliebig verändern, ohne die einzelnen Felder manuell dem Formular hinzufügen zu müssen.

Tags: Zend Framework PHP Zend_Form

Erstellt am 11.03.2010 von Niels Lange in Tipps und Tricks

nach oben Nach oben

nach oben Nach oben

Lesezeichen

Hier kannst du ein Lesezeichen zu diesem Artikel ablegen. Wähle einfach aus den folgenden Lesezeichen deinen persönlichen Anbieter aus. Durch einen Klick auf das jeweilige Icon wird das Lesezeichen erstellt.

del.icio.us Mister Wong Google Folkd Linkarena Slashdot Stumble Upon Web News Kledy Favoriten Icio Seek XL One Viwe Yigg Linksilo Yahoo Facebook Tausend Reporter

nach oben Nach oben

Aktuelles Tipps und Tricks Philosophie Dienstleistungen Referenzen Kontakt