2011-09-11 17 views
0

私は選択した国に応じてcountryとcityの2つの選択ボックスを持つフォームを持っています。 Ajaxを使用して国を選択すると、都市フィールドが動的に設定されます。Zend Form:依存フィールド検証

これまでのところ、都市選択ボックスにisValid()をオーバーライドして$context引数を使用して、選択した国を取得し、その都市が有効かどうかを確認します。

国の妥当性検査が失敗した場合、市の妥当性検査をスキップします。たとえば、誰かが国のフィールドに不正な値を注入することができます(国の検証は失敗します)。私の市の検証は行われず、dbのクエリは実行されません。

どうすればこの問題を解決できますか?

答えて

3

country要素が設定されているときに、city要素を移入するために、フォームクラスにisValid()およびsetDefaults()メソッドをオーバーライドします。

function isValid($data) { 
    if (isset($data['country'])) { 
     $this->populateCity($data['country']); 
    } 
    return parent::isValid($data); 
} 

function setDefault($name, $value) { 
    if ('country' === $value) { 
     $this->populateCity($value); 
    } 
    return parent::setDefault($name, $value); 
} 
+0

この方法では、国が有効でない都市を選択するためにデータベースのクエリをスキップしません。しかし、あなたは実際に私に良いアイデアをくれました! country要素が有効な場合にのみ、city要素にデータを代入する方がよいでしょうか?大丈夫ですか? – s3v3n

+0

私は解決策を持っています。私は実際に私の問題を解決し、後でそれを受け入れるコードを投稿するこの答えを編集します:) – s3v3n

+0

私はまだこの答えを編集する時間がなかったので、私はこの答えを受け入れるようにチェックします。私はisValid()の部分だけを使用しました。とにかくありがとう! – s3v3n

関連する問題