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

Ale*_*lek 2 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));
Run Code Online (Sandbox Code Playgroud)

这种方法适用于同一形式的其他地方,但是这个,另一个就像输出一样:

<input type="hidden" name="ratings1" value="" id="ratings1" />
Run Code Online (Sandbox Code Playgroud)

我转储了$ oHidden变量并输出:

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

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

谢谢,阿列克

min*_*gos 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!!!
}
Run Code Online (Sandbox Code Playgroud)

解决方法是设置动作参数:

$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!
}
Run Code Online (Sandbox Code Playgroud)

我知道这个问题已经有半年了,但是好吧,迟到总比没有好:D.