1

我正在使用 Zend Framework 编写应用程序。我有一个简单的表单,它有两个文本框。

如何向表单添加验证,以便至少填充一个输入框?

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;
    }
}

然后将此验证器附加到元素之一,标识两个名称:

// 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

创建一个带有两个选项的单选组,均未选中。隐藏文本字段。通过单选按钮上的 onclick 事件,您可以显示其中一个文本框。现在您可以将所需的验证器添加到单选按钮。一点解决方法,但结果是一样的。

于 2012-05-19T11:54:18.107 回答