Проблема как раз в функции isValid()
.Он удаляет все значения из формы и затем заполняет ее параметрами, которые ему передаются.Если параметр отсутствует, он, очевидно, больше не будет отображаться в форме, даже если он был задан явно несколькими строками ранее.
В моем случае было необязательное скрытое поле «перенаправить» в форме входа в систему.Вот код (упрощенный для читабельности):
$form = new Form_Login();
$redirect = $this->_getParam('redirect','/user/login/welcome');
$form->addElement('Hidden','redirect',array('value' => $redirect));
if ($this->_request->isPost() && $form->isValid($this->_getAllParams())) {
// WTF! the "request" field has no value!!!
}
Временное решение - установка параметра действия:
$form = new Form_Login();
$redirect = $this->_getParam('redirect','/user/login/welcome');
$this->_setParam('redirect',$redirect);
$form->addElement('Hidden','redirect',array('value' => $redirect));
if ($this->_request->isPost() && $form->isValid($this->_getAllParams())) {
// AHA! now it works!
}
Я знаю, что вопрос полугодовал, но, ну, лучшепоздно, чем никогда: D.