2

我有一个使用 Zend-Form 的非常复杂的表单设置。在某一时刻,我正在使用以下方法设置隐藏输入的值:

$oHidden = new Zend_Form_Element_Hidden('ratings'.$k);        
$oHidden->setValue('ratings');Zend_Debug::dump($oHidden);
$this->addElements(array($oHidden));

此方法在相同形式的其他地方效果很好,但是这个和另一个就像它输出一样:

<input type="hidden" name="ratings1" value="" id="ratings1" />

我已经转储了 $oHidden 变量,它输出:

object(Zend_Form_Element_Hidden)#143 (29) {
... ["_value":protected] => string(7) "ratings" ["_view":protected] => NULL ["_isPartialRendering":protected] => bool(false) }

所以它设置了一段时间的值,但它不会渲染它。请让我知道从哪里开始寻找这种行为的原因。

谢谢, 阿莱克

4

2 回答 2

5

问题正是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。

于 2011-06-22T13:21:47.007 回答
3
$hidden = new Zend_Form_Element_Hidden(array('name' => 'ratings', 'value' => 'ratings'));

试试看!

于 2011-01-27T20:36:13.503 回答