我使用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)
}
因此它将值设置为好一段时间,但它不会渲染它。请让我知道从哪里开始查找此行为的原因。
谢谢, 阿列克
答案 0 :(得分: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。
答案 1 :(得分:3)
$hidden = new Zend_Form_Element_Hidden(array('name' => 'ratings', 'value' => 'ratings'));
试试吧!