0

我有表格email字段,signup

我想用数据库验证电子邮件域,例如

Email adress is : example@work.com  or etc@etc.com

现在我想验证work.comoretc.com是否在 db 中列出,如果没有,那么它不应该是 vaidat.!

谁能帮我这个 ?

4

2 回答 2

3

代码:

public function validate($attributes = null, $clearErrors = true) {
    parent::validate($attributes, $clearErrors);
    if (!$this->hasErrors('email')) {
        $a = explode('@', $this->email);
        if (isset($a[1])) {
            $record = AllowedDomains::model()->findByAttributes(array('domain'=>$a[1]));
            if ($record === null) {
                $this->addError('email', "This domain isn't allowed");
            }
        }
    }
    return !$this->hasErrors();
}

笔记:

  • 将此代码放入模型中
  • email - 保存电子邮件地址的字段
  • AllowedDomains - 包含允许域的表的 CActiveRecord
  • 域 - 替换为正确的数据库字段
  • 不要忘记在 rules() 函数中添加电子邮件验证器。这将过滤掉无效的电子邮件地址,如果出现问题,上述代码将不会运行
于 2012-10-31T20:23:27.660 回答
1

您可以通过在模型的规则部分添加自定义 yii 验证器来完成此操作。这是一些示例代码:

public $email; // This is the field where the email is stored

/**
 * @return array validation rules for model attributes.
 */
public function rules()
{
    return array(
       array('email', 'checkDomain'),
    );
}

之后,您可以添加自定义验证功能

public function checkDomain($attribute,$params)
{
    $sEmailDomain = substr(strrchr($this->email, "@"), 1);

    // Check if the domain exists
    ...
    // If the domain exists, add the error
    $this->addError('email', 'Domain already exists in the database');
}

更多信息可以在这里找到:http ://www.yiiframework.com/wiki/168/create-your-own-validation-rule/

于 2012-10-31T20:13:33.700 回答