Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Заполните элемент zend_form из перенаправленного действия

Автор вопроса: Shaun BohannonОтветов: 1

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

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

    $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 предыдущей страницы отправки формы.

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

  • Он должен работать. Вы пытались заполнить fooID только из предопределенной строки, чтобы увидеть, действительно ли это работает? Jani Hartikainen 20.09.2009
  • Я пробовал просто заполнить поле магическим значением, например: $ form- ›populate (array ('fooID' =› '10')); Даже это не работает! Shaun Bohannon 20.09.2009
  • может быть полезно немного больше контекста: например, когда вы вызываете $ form- ›isValid ()? До или после $ form- ›populate ()? Steve 21.09.2009

phpmodel-view-controllerzend-frameworkzend-form

Ответы

Ответ 1 · gnarf

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы