微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-电子邮件验证.从网站访问时有效,但单元测试未通过

我今天遇到了一个相当奇怪的问题.

我使用以下规则建立了模型:

public function rules()
{
    return [
        [['name', 'email', 'website'], 'required'],
        [['name'], 'string', 'max' => 512],
        [['name'], 'unique'],
        [['email'], 'email'],
        [['website'], 'url'],
    ];
}

通过控制器访问时,此方法将相应地工作.但是我的单位
测试无法通过验证电子邮件

    $model->email = 'somethinghan.nl';
    $this->assertFalse($model->validate('email'),
        'Email is invalid.');
    $model->email = 'student@han.nl';
    $this->assertTrue($model->validate('email'),
        'Validating email with a valid email: ' . $model->email);

我在表格中使用了相同的电子邮件,其中数据按原样应被接纳到数据库中.但是在此处使用时,第二次电子邮件验证失败.

我尝试了其他电子邮件格式,但这也无法解决问题.有任何想法吗?

解决方法:

如果使用getErrors()转储错误,您会看到不是电子邮件验证失败.

它不起作用的原因是因为您没有指定要验证为数组的属性

如果查看Validator-code(validate()调用最终会在此结束):

public function validateAttributes($model, $attributes = null)
{
    if (is_array($attributes)) {
        $attributes = array_intersect($this->attributes, $attributes);
    } else {
        $attributes = $this->attributes;
    }
    ...
}

所以基本上:如果不是数组,它将被丢弃,因此它将验证所有属性.

将其更改为$this-> assertFalse($model-> validate([’email’]),’电子邮件无效.’);它应该工作

编辑:顺便说一句,这是一个很容易犯的错误,因为框架确实在许多其他地方将单个字符串转换为数组.因此,这种行为并不是真正一致的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐