我正在向用户的控制器发送请求。这两种方法返回相同的结果:Cakephp:默认验证
$this->User->validates();
或
$this->User->set($this->request->data);
$this->User->validates();
是因为cakephp
是对请求数据进行默认的验证?
如何执行自定义验证?我是否需要设置新的数据值?
我正在向用户的控制器发送请求。这两种方法返回相同的结果:Cakephp:默认验证
$this->User->validates();
或
$this->User->set($this->request->data);
$this->User->validates();
是因为cakephp
是对请求数据进行默认的验证?
如何执行自定义验证?我是否需要设置新的数据值?
cakephp只有在您的模型中定义验证时才会生效。
这里是一个例子如何在模型中设置验证。
/**
* Validation
*
* @var array
* @access public
*/
public $validate = array(
'first_name' => array(
'notEmpty' => array(
'rule' => 'notEmpty',
'message' => 'This field cannot be left blank.',
'last' => true,
),
'size' => array(
'rule' => array('maxLength', 50),
'message' => 'This field must be no larger than 50 characters long.'
),
),
'last_name' => array(
'size' => array(
'rule' => array('maxLength', 50),
'message' => 'This field must be no larger than 50 characters long.',
'allowEmpty' => true,
),
),
'username' => array(
'notEmpty' => array(
'rule' => 'notEmpty',
'message' => 'This field cannot be left blank.',
'last' => true,
),
'size' => array(
'rule' => array('maxLength', 255),
'message' => 'This field must be no larger than 255 characters long.'
),
'isUnique' => array(
'rule' => 'isUnique',
'message' => 'The username has already been taken.',
'last' => true,
),
),
);
如果你想要你自己的验证,你可以这样做。
public $validate = array(
'email' => array(
'notEmpty' => array(
'rule' => 'notEmpty',
'message' => 'This field cannot be left blank.',
'last' => true,
),
'checkMail' => array(
'rule' => 'checkMail',
'message' => 'Please provide a valid email address.',
'last' => true,
),
'isUnique' => array(
'rule' => 'isUnique',
'message' => 'Email address already in use.',
'last' => true,
),
),
);
/**
* check email format
*/
function checkMail() {
$email = $this->data['User']['email'];
$dotInString = substr_count(strstr($email, '@'), '.');
if ($dotInString > 2)
return false;
if ($dotInString > 1)
$preg_match_string = "/^[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+(\.[a-zA-Z]{2,2})+(\.[a-zA-Z]{2,6})+$/";
else
$preg_match_string = "/^[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+(\.[a-zA-Z]{2,6})+$/";
if (preg_match($preg_match_string, $email) > 0) {
return true;
} else {
return false;
}
}
检查CakePHP的文件http://book.cakephp.org/2.0/en/models/data-validation.html#adding-your-own-validation-methods –