Php Symfony 1.4-强制Symfony在到达后验证器之前停止执行

Php Symfony 1.4-强制Symfony在到达后验证器之前停止执行,php,symfony-1.4,Php,Symfony 1.4,我在symfony 1.4中创建了一个丢失密码表单,并且一直遇到一个问题,即即使小部件约束失败,也会调用post验证器 片段: $this->validatorSchema['email_address'] = new sfValidatorEmail( array( 'max_length' => 254, // http://www.rfc-editor.org/errata_search.php?rfc=3696&eid=1690

我在symfony 1.4中创建了一个丢失密码表单,并且一直遇到一个问题,即即使小部件约束失败,也会调用post验证器

片段:

$this->validatorSchema['email_address'] = new sfValidatorEmail(
    array(
        'max_length'    => 254,  // http://www.rfc-editor.org/errata_search.php?rfc=3696&eid=1690
        'min_length'    => 4,
        'required'      => true,
        'trim'          => true
    ),
    array(
        'invalid'       => 'Email address entered is malformed',
        'max_length'    => 'Email Address cannot contain more than %max_length% characters',
        'min_length'    => 'Email Address must be at least %min_length% characters',
        'required'      => 'Please enter an email address'
    )
);

$this->mergePostValidator(new sfValidatorCallback(array('callback' => array($this, 'emailValidate'))));
$this->mergePostValidator(new sfValidatorCallback(array('callback' => array($this, 'throttleCheck'))));
问题是“emailValidate”回调假定输入了格式良好的电子邮件地址,例如a@b.com,但是如果我输入垃圾,比如'fdadfaa',表单仍然继续尝试执行post验证器,而它不应该执行。如果数据不好,没有理由发出查询


我有一个“halt_on_error”标志,可以传递给模式验证器构造函数,但对我不起作用。还有人过这座桥吗?

Symfony是个疯狂的旅程。。。能够使用以下方法使其工作:

$this->validatorSchema['email_address'] = new sfValidatorAnd(
    array(
        new sfValidatorEmail(
            array(
                'max_length'    => 254,  // http://www.rfc-editor.org/errata_search.php?rfc=3696&eid=1690
                'min_length'    => 4,
                'required'      => true,
                'trim'          => true
            ),
            array(
                'invalid'       => 'Email address entered is malformed',
                'max_length'    => 'Email Address cannot contain more than %max_length% characters',
                'min_length'    => 'Email Address must be at least %min_length% characters'                        
            )
        ),
        new sfValidatorCallback(array('callback' => array($this, 'emailValidate'))),
        new sfValidatorCallback(array('callback' => array($this, 'throttleCheck')))
    ),
    array('halt_on_error' => true),
    array('required' => 'Please enter an email address')
);
这里唯一的问题是,postValidator直接绑定到email字段,因此您必须将任何引用从
$values['email']
更改为
$values
。但它似乎确实能在击中后验证器之前停止执行流