Zend Form: How do I make it bend to my will? Zend Form: How do I make it bend to my will? php php

Zend Form: How do I make it bend to my will?


Barrett Conrad's advice is what I would have suggested. Also, keep in mind that you don't need to use a form object to render your form.

One thing you could do is create a form in your view script that has elements with the same name as a form class.

Your HTML form:

<form action="/login/" method="post"><fieldset>    <label for="username">Username:</label>    <input type="text" size="10" name="username" />    <label for="password">Password:</label>    <input type="password" size="10" name="password" />    <input type="submit" /></fieldset></form>

Your class:

class LoginForm extends Zend_Form{    public function init()    {        $username = $this->createElement('text','username');        $username->setRequired(true);        $this->addElement($username);        $password = $this->createElement('password','password');        $password->setRequired(true);        $this->addElement($password);            }}

Your form class reflects your HTML form, each element in your class has its own validators and requirements. Back in your action you can create an instance of your form class and validate your post/get vars against that form:

$form = new LoginForm();if ($this->_request->isPost()) {    if ($form->isValid($this->_request->getParams())) {        // do whatever you need to do    } else {        $this->view->errors = $form->getMessages();    }}

You can display the the error messages at the top of your form in one group, using this method.

This is a basic example, but it allows you to have total control over the presentation of your form without spending the time to learn to use decorators. Much of the strength of Zend_Form is in its validation and filtering properties, in my opinion. This gives you that strength. The main draw back to a solution like this is that your view script HTML form can become out-of-sync with your form class.


Render each element individually in your view - for example

<!-- view script here --><form method="POST">Name: <?php echo $this->myForm->getElement('name')->render(); ?>some other text between the fieldsBirthdate: <?php echo $this->myForm->getElement('birthdate')->render(); ?><input type="submit" /></form>

This maintains the ability to use the Zend_Form view helpers (i.e. to display error messages and maintain the values of the form fields when validation fails) but gives you full customization ability.

If you want to go further, then turn off the default decorators of the individual form elements and then either attach your own to further customize exactly what tags are used (i.e. for error messages and labels) or don't use decorators at all (other than to render the form element itself) and then write all the surrounding HTML manually. Complete customization ability without losing the benefits of Zend_Form, both at the form level and at the view level.