Zend Framework でアプリケーションを作成しています。2 つのテキスト ボックスを持つ単純なフォームがあります。
入力ボックスの少なくとも 1 つが入力されるように、フォームに検証を追加するにはどうすればよいですか?
Zend Framework でアプリケーションを作成しています。2 つのテキスト ボックスを持つ単純なフォームがあります。
入力ボックスの少なくとも 1 つが入力されるように、フォームに検証を追加するにはどうすればよいですか?
次のようなカスタムバリデーターを作成できます。
class My_Validate_AtLeastOneNotEmpty implements Zend_Validate_Interface
{
protected $thisField;
protected $otherField;
protected $messages = array();
public function __construct($thisField, $otherField){
$this->thisField = $thisField;
$this->otherField = $otherField;
}
public function isValid($value, $context = null)
{
$validator = new Zend_Validate_NotEmpty();
if (!$validator->isValid($value) && !$validator->isValid($context['otherField'])){
$this->messages[] = 'At least one of the fields - '
. $thisField . ' or ' . $otherField
. ' - must be non-empty';
return false;
}
return true;
}
public function getMessages()
{
return $this->messages;
}
}
次に、このバリデーターを要素の1つにアタッチして、両方の名前を識別します。
// create the two fields
$fld1 = new Zend_Form_Element_Text('field1');
$fld2 = new Zend_Form_Element_Text('field2');
// add the validator to one of them, identifying both fields
$fld1->addValidator(new My_Validate_AtLeastOneNotEmpty('field1', 'field2'));
通常、バリデーターをアタッチする要素のフィールド名を識別する必要はありません。ただし、両方のフィールド名をバリデーターに渡すことで、ユーザーにとってエラーメッセージを少し明確にすることができます。
2 つのオプションを使用してラジオ グループを作成し、どちらもオフにします。テキストフィールドを非表示にします。ラジオ ボタンの onclick イベントを使用すると、テキスト ボックスの 1 つを表示できます。これで、必要なバリデーターをラジオ ボタンに追加できるようになりました。少し回避策がありますが、結果は同じです。