Zend_Form_Element在不同的动作上呈现不同的渲染

时间:2011-07-07 08:38:58

标签: zend-framework action zend-form-element

我在Zend Framework中创建了自己的表单元素。我唯一想做的是在元素首次创建时添加一个不同的功能(因此它被'new'动作请求),以及渲染元素进行编辑时的其他功能(由'edit'请求)动作)。

我该怎么做?我在文档中找不到它。

这是我的代码:

<?php

class Cms_Form_Element_Location extends Zend_Form_Element {

    public function init() {

        App_Javascript::addFile('/static/scripts/cms/location.js');

        $this
            ->setValue('/')
            ->setDescription('Enter the URL')
            ->setAttrib('data-original-value',$this->getValue())

        ;

    }

}

&GT;

1 个答案:

答案 0 :(得分:4)

您可以将操作作为参数传递给元素:

$element = new Cms_Form_Element_Location(array('action' => 'edit');

然后在元素中添加一个setter,将参数读入受保护的变量。如果将此变量默认为“new”,则只需在表单处于编辑模式时传递操作(或者您可以使用请求对象从控制器动态设置参数)。

<?php

class Cms_Form_Element_Location extends Zend_Form_Element 
{

    protected $_action = 'new';

    public function setAction($action)
    {
        $this->_action = $action;
        return $this;
    }

    public function init() 
    {

        App_Javascript::addFile('/static/scripts/cms/location.js');

        switch ($this->_action) {
            case 'edit' :

                // Do edit stuff here

                break; 

            default :

                $this
                    ->setValue('/')
                    ->setDescription('Enter the URL')
                    ->setAttrib('data-original-value',$this->getValue());
            }

    }

}