Заполните элемент zend_form из переданного действия - PullRequest
0 голосов
/ 20 сентября 2009

Теперь я почти уверен, что это невозможно, но я был бы признателен за разъяснение, почему, поэтому я могу избежать подобных ситуаций в будущем! У меня есть форма, которая при отправке в зависимости от пользовательского ввода либо завершается, либо требует дальнейшего ввода с параметром, который необходимо передать в новую форму.

Первоначальная отправка работает нормально, а значения доступны в следующей форме!

    $fooID = $foo->save($values);
    if($values['register'] == "true")
    {
      $this->_forward("register", "user", null, array('fooID' => $fooID));
    }else{
      $this->_redirect('/feedback/thanks');
    }

Когда я выполняю следующие действия в переадресации, на экран выводится правильный идентификатор.

if($this->_getParam('fooID') != null){
    echo "FOO: ".$this->_getParam('fooID');
}

Однако по какой-то причине я не могу ни добавить элемент к форме $, инициализированный в этом действии, ни заполнить значение существующего поля каким-либо значением.

$form->populate(array('fooID' => $this->_getParam('fooID')));

Вышеприведенное просто ничего не делает, и значение не заполняется, для ссылки создается элемент следующим образом:

     $this->addElement('hidden', 'fooID', array(
        'decorators' => $this->_noElementDecorator,
        'validators' => array(
            'Digits'
        ),
        'required' => true
    ));

Что странно, так это то, что если я изменю fooID в качестве имени скрытого элемента на просто id, значение заполняется параметром url предыдущей страницы отправки формы.

Как я уже сказал, я знаю, что это невозможно, просто интересно, где находится ограничение, если я могу вывести значение рядом с оператором, который не заполняет значение элемента.

1 Ответ

0 голосов
/ 20 сентября 2009
  • Возможно ли, что вы меняете значение после выполнения populate()? Например: $form->isValid($this->_request->getPost()); установит новые значения формы.

  • Попробуйте var_dump($form->fooID->getValue()); в качестве строки отладки после populate() и один раз до завершения действия? Что это показывает вам?

...