2016-04-13 9 views
0

Ich arbeite an cakephp v2.3. Während ich Validierungsdaten von $this->User->validates bin, wird es immer falsch zurückgeben, auch wenn Werte vorhanden sind.Problem in CakePHP Datenvalidierung auf Modell

Hier ist meine Gültigkeitsregel

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' 
      ) 
     ), 
    ); 

und das ist, wie ich

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/'); 
      } 
     } 

bin Validierung Wenn ich

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

versuchen wird es

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.' 
    ) 
) 
zurückkehren

Dies sind die Daten-I

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 
       ) 
     ) 
) 

Antwort

0

Ihre Validierungen sind vorbei scheint mich gut, aber wenn wir die Daten in Modell nicht einige Zeit festgelegt, die diese Art von Problem verursacht.

Fügen Sie die folgende Zeile hinzu, bevor Sie die Validierung durchführen.

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

So sollte Code aussehen

$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

Dank es funktioniert. :) –