オンラインリファレンスドキュメントのZend_Form_SubFormサンプルを使用して3つの画面「ウィザード」を作成しました。一度に1フィールド以上をZendサブフォームで検証する方法は?
私はこの問題を解決するために問題が発生しています: 最初の画面のフィールド1,2、& 3がすでにデータベースにある場合は、重複するレコードを追加しようとしていることをユーザーに通知します。これらのフィールドには、それぞれ固有のバリデータがあります。どうにか私はこの "グループバリデータ"を追加する必要があります。
ので、その最も基本的なレベルでは、私がやろうとしている:
if($field_1_not_in_db && $field_2_not_in_db && $field_3_not_in_db){
return true;//validation OK
} else {
return false;//invalid data
}
私もいくつかの問題、反対間近に迫っています:それは複数のフィールドに適用されるので、私はしません 1)それをどのフィールドに接続するかを知っている。エラーメッセージが添付されているフィールドの横に表示されるので、これは重要です。これらの「マルチフィールドバリデータ」エラーが画面上部に表示されない限り、理想的です。 2)私のバリデータはただ一つの値(私がそれを添付するフィールドの値であり、それはそれが検証されるべき複数のフィールドの値ではありません)を受け取ります。 3)エラーメッセージの元の(重複していない)レコードへのリンクを提供しますが、リンクをエスケープします。その回避方法を理解できません。
実際に実行しているセットアップ(下)は実際に正常に実行されますが、NewPlaceバリデータは、希望のグループの値の代わりに$ _POST ['city_fk']を$ fieldsとして受け取ります。
$city_fk = new Zend_Form_Element_Select('city_fk');
$cities = array();
$city_fk->setMultiOptions($cities)
->setLabel('City')
->setDescription('The city this place is in')
->setRequired(true);
$v = array(
'place_is_unique' => array(
'NewPlace',
'fields' => array('place_name','phone_number','phone_extension','street','post_code_name'),
)
);
$city_fk->addValidators($v);
$addressSubForm->addElement($city_fk);
class My_Validate_NewPlace extends Zend_Validate_Abstract
{
public function isValid($fields)
{
$result = false;
if(!$result)
{
$this->_error('sorry, this is duplicate data. see it <a href="linktoduplicate">here</a>');
return false;
}
return true;
}
}