
Sometimes Zend’s built-in form decorators are not flexible enough to achieve customized views. Luckily, Zend provides means to specify custom view scripts. The following example demonstrates how to set and handle such a script.
First and foremost, in your default (action) view script simply output the form as usual:
<div class="formContainer"> <?php echo $this->form ?> </div>
Then, in your derived Zend_Form class set your custom view script that takes care of rendering the form the way you need it:
/** * Custom Zend_Form view script example. * @author matthias.kerstner */ class Custom_Form extends Zend_Form { public function init() { $this->setDecorators(array(array( 'viewScript', array( 'viewScript' => '_customForm.phtml', array('formId' => 'CustomForm', 'formClass' => 'customForm') ))));
Finally, the custom Zend_Form view script looks like the following. Note that it uses additional parameters that you can specify in Custom_Form.
<?php $params = $this->element->getDecorator('ViewScript')->getOptions(); $formId = $params[0]['formId']; $formClass = (isset($params[0]['formClass'])) ? $params[0]['formClass'] : ''; ?> <form id="<?php echo $formId ?>" class="<?php echo $formClass ?>" method="<?php echo $this->element->getMethod() ?>" action="<?php echo $this->element->getAction() ?>" enctype="<?php echo $this->element->getEnctype() ?>"> <?php echo $this->element->my_element_1; echo $this->element->my_element_2; echo $this->element->submit; ?> </form>
Don’t forget to call parent::init(); in any of your derived classes. Using custom view scripts gives you the full power to design your form view, but remember that in contrast to using built-in decorators you need to echo your elements manually in your view script.