0

Zend_Form で値の入力を無効にすることができません。

私は独自のフォームクラスを持っています。フォームが呼び出される(または再投稿される)たびにランダムな値を動的に設定したい非表示のトークン要素を使用します。setValue がうまくいくと思いました。

class MY_Form_Test extends Zend_Form {
    public function init() {
    ...

    $this->addElement('hidden', 'token');
    $this->getElement('token')->setValue(uniqid('',true));
    ... 
}

BUT:このような単純なコントローラーがある場合。Zend は、新しい非表示の値を生成することを除いて、古い非表示の値の入力を自動化します。

$form = new JC_Form_Test();
if($form->isValid($_POST)){
   // Action ... 
}
else{
   // Error
}

解決策:私が見つけた唯一の解決策は、コントローラーで setValue を呼び出し、その後に isValid メソッドを呼び出すことです。例えば。エラーブロックで。

質問:フォーム クラスで要素の値を直接セットアップする方法、またはフォーム クラスまたは isValid() が呼び出される前に値の入力を無効にする方法はありますか?

4

2 に答える 2

1

それが最善の方法だと思います。

私は Zend Framework をよく使っており、いくつかの Zend クラスを上書きするための独自のライブラリを持っています。

何かを変更することは悪くありませんが、Zend Framework 内で直接変更しないでください。

于 2011-08-24T08:45:33.183 に答える
0

2 番目の解決策:私が見つけた 2 番目の解決策は、Form クラスで isValid() メソッドをオーバーロードすることです。このような。次に、すべてのコントローラーに setValue() を配置する必要はありません。

class MY_Form_Test extends Zend_Form {

    ...

    public function isValid($data){
    // Propagate values
    $valid = parent::isValid($data);

    $this->getElement('token')->setValue(uniqid('',true));

    return $valid;
}

他の解決策はありますか。この仕事をより簡単にするためのいくつかの要素オプションはありますか?

于 2011-06-03T14:43:44.847 に答える