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)
}
所以它设置值只是一段时间,但它不会渲染它.请让我知道从哪里开始查找此行为的原因.
谢谢,阿列克
问题恰恰在于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.
| 归档时间: |
|
| 查看次数: |
6430 次 |
| 最近记录: |