Zend-form setValue,view具有空值,如<input value =“”/>

时间:2010-12-09 19:26:30

标签: zend-framework zend-form setvalue

我使用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) }

因此它将值设置为好一段时间,但它不会渲染它。请让我知道从哪里开始查找此行为的原因。

谢谢, 阿列克

2 个答案:

答案 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'));

试试吧!