2

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) }

そのため、しばらくの間は問題なく値を設定しますが、レンダリングしません。この動作の理由をどこから調べればよいか教えてください。

ありがとう、アレク

4

2 に答える 2

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.

于 2011-06-22T13:21:47.007 に答える
3
$hidden = new Zend_Form_Element_Hidden(array('name' => 'ratings', 'value' => 'ratings'));

それを試してみてください!

于 2011-01-27T20:36:13.503 に答える