Zend_Form_Element разные рендеры на разные действия - PullRequest
2 голосов
/ 07 июля 2011

Я создал свой собственный элемент формы в 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())

        ;

    }

}

?>

1 Ответ

4 голосов
/ 07 июля 2011

Вы можете передать действие элементу в качестве параметра:

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

Затем добавьте установщик в ваш элемент, чтобы прочитать параметр в защищенную переменную.Если для этой переменной по умолчанию задано значение «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());
            }

    }

}
...