1

Zend Framework でアプリケーションを作成しています。2 つのテキスト ボックスを持つ単純なフォームがあります。

入力ボックスの少なくとも 1 つが入力されるように、フォームに検証を追加するにはどうすればよいですか?

4

2 に答える 2

3

次のようなカスタムバリデーターを作成できます。

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'));

通常、バリデーターをアタッチする要素のフィールド名を識別する必要はありません。ただし、両方のフィールド名をバリデーターに渡すことで、ユーザーにとってエラーメッセージを少し明確にすることができます。

于 2012-05-19T17:03:53.553 に答える
0

2 つのオプションを使用してラジオ グループを作成し、どちらもオフにします。テキストフィールドを非表示にします。ラジオ ボタンの onclick イベントを使用すると、テキスト ボックスの 1 つを表示できます。これで、必要なバリデーターをラジオ ボタンに追加できるようになりました。少し回避策がありますが、結果は同じです。

于 2012-05-19T11:54:18.107 に答える