2016-04-13 73 views
0

我正在cakephp v2.3上工作。雖然我通過$this->User->validates驗證數據,但即使值存在,它也會始終返回錯誤。問題在cakephp數據驗證模型

這裏是我的驗證規則

public $validate = array(
     'first_name' => array(
      'notEmpty' => array(
       'rule' => 'notEmpty', 
       'message' => 'This field cannot be left blank.', 
       'last' => true, 
       'required' => true, 
      ), 
      'size' => array(
       'rule' => array('maxLength', 50), 
       'message' => 'This field must be no larger than 50 characters long.' 
      ), 
     ), 
     'last_name' => array(
      'notEmpty' => array(
       'rule' => 'notEmpty', 
       'message' => 'This field cannot be left blank.', 
       'last' => true, 
       'required' => true, 
      ), 
      'size' => array(
       'rule' => array('maxLength', 50), 
       'message' => 'This field must be no larger than 50 characters long.', 
       'allowEmpty' => true, 
      ), 
     ), 

     'email' => array(
      'notEmpty' => array(
       'rule' => 'notEmpty', 
       'message' => 'This field cannot be left blank.', 
       'last' => true, 
       'required' => 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, 
      ), 
     ), 
     'password' => array(
      'rule1' => array(
       'rule' => array('minLength', 6), 
       'message' => 'Passwords must be at least 6 characters long.', 
       'required' => true, 
      ), 

     ), 
     'verify_password' => array(
      'rule' => 'validIdentical', 
     ), 
     'current_pass' => array(
      'notEmpty' => array(
       'rule' => 'notEmpty', 
       'message' => 'This field cannot be left blank.', 
       'last' => true, 
      ), 
      'match' => array(
       'rule' => 'validICurrent', 
      ) 
     ), 
     'gender' => array(
      'notEmpty' => array(
       'rule' => 'notEmpty', 
       'message' => 'This field cannot be left blank.', 
       'last' => true, 
      ), 
     ), 
     'mobile' => array(
      'notEmpty' => array(
       'rule' => 'notEmpty', 
       'message' => 'This field cannot be left blank.', 
       'last' => true, 
       'required' => true, 
      ), 
      'numeric' => array(
       'rule' => 'numeric', 
       'message' => 'Please enter valid phone numbers.', 
      ) 
     ), 
     'image' => array(
      'SizeLimit' => array(
       'rule' => array('isUnderPhpSizeLimit', false), 
       'message' => 'File exceeds upload filesize limit', 
      ), 
      'FormSizeLimit' => array(
       'rule' => array('isUnderFormSizeLimit', false), 
       'allowEmpty' => true, 
       'message' => 'File exceeds form upload filesize limit' 
      ), 
      'CompletedUpload' => array(
       'rule' => array('isCompletedUpload', false), 
       'message' => 'File was not successfully uploaded' 
      ), 
      'ValidExtension' => array(
       'allowEmpty' => true, 
       'rule' => array('isValidExtension', array('gif', 'png', 'jpg', 'jpeg'), false), 
       'message' => 'File does not have a gif, png, ,jpg and jpeg extension' 
      ) 
     ), 
    ); 

,這是我如何驗證

if ($this->request->is("post")) { 
     if (!empty($this->request->data)) { 

      if (!$this->User->validates($this->request->data)) { 
       $this->Session->setFlash(__('The Information could not be saved. Please, try again.'), 'message', array('class' => 'danger')); 
       $this->redirect(Router::url('/', true) . 'sign-up/'); 
      } 
     } 

當我嘗試

die(debug($this->User->invalidFields())); 

它將返回

array(
    'password' => '*****', 
    'last_name' => array(
     (int) 0 => 'This field cannot be left blank.', 
     (int) 1 => 'This field cannot be left blank.' 
    ), 
    'email' => array(
     (int) 0 => 'This field cannot be left blank.', 
     (int) 1 => 'This field cannot be left blank.' 
    ), 
    'mobile' => array(
     (int) 0 => 'This field cannot be left blank.', 
     (int) 1 => 'This field cannot be left blank.' 
    ) 
) 

這是我傳遞

Array 
(
    [User] => Array 
     (
      [role_id] => 2 
      [first_name] => kapil 
      [last_name] => sharma 
      [email] => [email protected] 
      [password] => [email protected] 
      [verify_password] => [email protected] 
      [mobile] => 1234567890 
      [gender] => Male 
      [image] => Array 
       (
        [name] => Screenshot_61.png 
        [type] => image/png 
        [tmp_name] => /tmp/phppYBJQF 
        [error] => 0 
        [size] => 50611 
       ) 
     ) 
) 

回答

0

您的驗證似乎沒什麼問題,但數據如果不設置數據模型一段時間,這將導致這種問題。

在驗證之前添加以下行。

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

所以代碼應該看起來像

$this->User->set($this->request->data); //set data in model 

if (!$this->User->validates()) { 
    $this->Session->setFlash(__('The Information could not be saved. Please, try again.'), 'message', array('class' => 'danger')); 
    $this->redirect(Router::url('/', true) . 'sign-up/'); 
} 
+0

由於它的工作原理。 :) –