Validation CakePHP-模型(自定义电子邮件验证)

Validation CakePHP-模型(自定义电子邮件验证),validation,cakephp,Validation,Cakephp,我有以下自定义功能,检查电子邮件是否有gmail.com帐户 function check_email($mail) { list($user, $domain) = explode('@', $mail); if ($domain !== 'gmail.com' ){ return false; } else{ return true; } } 在我的模型上,我想检查它是否返回true,如果不是,它将给出一条错误消息。这就是我得到的(var$validate=

我有以下自定义功能,检查电子邮件是否有gmail.com帐户

  function check_email($mail) {  
list($user, $domain) = explode('@', $mail);


if ($domain !== 'gmail.com' ){
return false;

} else{
    return true; 
    } }
在我的模型上,我想检查它是否返回true,如果不是,它将给出一条错误消息。这就是我得到的(var$validate=array的一部分):


即使我使用gmail.com帐户,也会不断收到错误消息。。。我做错了什么?

您是否尝试使用cake的优秀调试工具?像pr()或debug()或简单的print_r()? 然后你会在不到几秒钟的时间里发现这样一个简单的错误

在您的情况下,$mail将包含一个数组,因此不适合直接比较

所以应该更像

function check_email($data) { 
    $mail = array_shift($data);
    ....
}

另外,我觉得你的验证数组有点奇怪。请参阅有关如何正确设置自定义规则的手册。

您是否尝试使用cake的优秀调试工具?像pr()或debug()或简单的print_r()? 然后你会在不到几秒钟的时间里发现这样一个简单的错误

在您的情况下,$mail将包含一个数组,因此不适合直接比较

所以应该更像

function check_email($data) { 
    $mail = array_shift($data);
    ....
}

另外,我觉得你的验证数组有点奇怪。请参阅有关如何正确设置自定义规则的手册。

您的$validate数组中似乎缺少规则字段。此外,传递给验证方法的值实际上是一个数组,而不是字符串。检查自定义验证规则的语法

试着这样做:

var $validate = array(
   'email' => array(
        'rule'    => array('checkEmail'),
        'message' => 'Not a valid email address.' 
    )
);

function checkEmail($value) {
    list($user, $domain) = explode('@', $value['email'], 2);
    return $domain === 'gmail.com';
}

看起来$validate数组中缺少规则字段。此外,传递给验证方法的值实际上是一个数组,而不是字符串。检查自定义验证规则的语法

试着这样做:

var $validate = array(
   'email' => array(
        'rule'    => array('checkEmail'),
        'message' => 'Not a valid email address.' 
    )
);

function checkEmail($value) {
    list($user, $domain) = explode('@', $value['email'], 2);
    return $domain === 'gmail.com';
}