2015-09-03 350 views
0

我正在向用户的控制器发送请求。这两种方法返回相同的结果:Cakephp:默认验证

$this->User->validates(); 

$this->User->set($this->request->data); 
$this->User->validates(); 

是因为cakephp是对请求数据进行默认的验证?

如何执行自定义验证?我是否需要设置新的数据值?

+0

检查CakePHP的文件http://book.cakephp.org/2.0/en/models/data-validation.html#adding-your-own-validation-methods –

回答

0

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 validation

+0

我设置了验证规则,但我想知道CakePHP默认是否验证请求数据或其他数据,基本上请求 - >数据默认或不成为活动数据的模型。 –

+0

如果您尝试保存任何信息,则只有在您要保存的数据上调用验证。 – urfusion

+0

如果你仍然有疑问,然后提供更多的信息在你的问题。根据你的问题,你似乎在询问如何验证验证以及如何进行自定义验证。 – urfusion