用不同的对象推测验证错误

时间:2014-01-09 21:21:11

标签: php validation email propel

我们正在使用自定义电子邮件验证程序,我们在验证与同一对象有关系的两个不同对象时遇到问题。

以下是示例代码:

$ti = EnumTipoInteresadoQuery::create()->findOne();

$i1 = new Interesado();
$i1->setTipoInteresado($ti);
$i1->setMail('testexample.com');
var_dump($i1->validate()); // Must be false and we get false. OK!

$i2 = new Interesado();
$i2->setTipoInteresado($ti);
$i2->setMail('hello@example.com');
var_dump($i2->validate()); // Must be true but we get false. BAD!

当我们验证第一个($ i1)时,一切正常。当我们验证第二个($ i2)时,如果我们应该得到真的那么我们会得到假的!

在自定义验证器中,我们回显了一条消息,其中包含了经过验证的字符串:

class EmailValidator implements BasicValidator
{
  public function isValid(ValidatorMap $map, $str)
  {
    echo "Validating $str\n";
    return preg_match('/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i', $str) !== 0;
  }
}

查看输出,我们看到以下内容:

Validating testexample.com
bool(false)
Validating testexample.com
Validating hello@example.com
bool(false)

我们可以清楚地看到第二次验证($ i2)两次调用自定义验证器,首先是第一个对象($ i1)的邮件,然后是第二个邮件($ i2)。

我们怀疑,因为这两个对象引用了一个公共对象($ ti),所以验证以某种方式“级联”并验证第一个($ i1)和第二个($ i2)对象。

此问题是否有解决方法?这是一个错误吗?这是我们做错了吗?

提前致谢!

安德烈斯

0 个答案:

没有答案