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.

Leave a Reply