我有一个使用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) }
所以它会在一段时间内设置好这个值,但是不会渲染它。请让我知道从哪里开始寻找这种行为的原因。
谢谢,阿列克
发布于 2011-06-22 21:21:47
问题恰恰出在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-01-28 04:36:14
$hidden = new Zend_Form_Element_Hidden(array('name' => 'ratings', 'value' => 'ratings'));试试看!
https://stackoverflow.com/questions/4402213
复制相似问题