параметр конструктора недоступен в init - PullRequest
3 голосов
/ 24 ноября 2010

Я пытаюсь использовать один Zend_Form для обновления и создания и хочу переключать оба параметра. Но мой подход с использованием конструктора не сработал. Когда я отлаживаю эту часть, свойство устанавливается правильно, но в методе init () оно снова равно null.

Может быть, я не понимаю подход Zend_Form. Вы можете мне помочь? Где ошибка?

Форма класса:

class Application_Form_User extends Zend_Form {
    const CREATE = 'create';
    const UPDATE = 'update';

    protected $_formState;

    public function __construct($options = null, $formState = self::CREATE) {
        parent::__construct($options);

        $this->_formState = $formState;
        $this->setAction('/user/' . $this->_formState);
    }

    public function init() {

      $this->setMethod(Zend_Form::METHOD_POST);

    if ($this->_formState == self::CREATE) {
            $password = new Zend_Form_Element_Password('password');
            $password->setRequired()
                    ->setLabel('Password:')
                    ->addFilter(new Zend_Filter_StringTrim());
    }
[..]

Использование в действии контроллера:

$form = new Application_Form_User();
$this->view->form = $form->render();

Спасибо.

1 Ответ

2 голосов
/ 24 ноября 2010

Метод init() вызывается внутри parent::__construct($options).Попробуйте это:

public function __construct($options = null, $formState = self::CREATE) {
    $this->_formState = $formState;
    parent::__construct($options);

    $this->setAction('/user/' . $this->_formState);
}

Я переключил первые две строки конструктора.

...