2015-02-26 1 views
1

Je ne parviens pas à détecter et afficher les erreurs de validation dans ma classe de contrôleurs CakePHP. J'ai ce modèle:Cake php, message de validation non affiché

public $validate = array(
    'username' => array(
     'notEmpty' => array(
      'rule' => array('notEmpty'), 
      'message' => 'Your custom message here', 
      'allowEmpty' => false, 
      'required' => true, 
      //'last' => false, // Stop validation after this rule 
      //'on' => 'create', // Limit validation to 'create' or 'update' operations 
     ), 
     'alphaNumeric' => array(
      'rule' => array('alphaNumeric'), 
      'message' => 'Your custom message here', 
      //'allowEmpty' => false, 
      //'required' => false, 
      //'last' => false, // Stop validation after this rule 
      //'on' => 'create', // Limit validation to 'create' or 'update' operations 
     ), 
     'maxLength' => array(
      'rule' => array('maxLength', 50), 
      'message' => 'Your custom message here', 
      //'allowEmpty' => false, 
      //'required' => false, 
      //'last' => false, // Stop validation after this rule 
      //'on' => 'create', // Limit validation to 'create' or 'update' operations 
     ), 

    )); 

et voilà comment j'essaie d'attraper un message de validation dans le contrôleur en enregistrer un nouvel élément dans un tableau:

public function add() { 

    if ($this->request->is('post')) { 
     $this->Admin->set($this->request->data); 
     //$this->Admin->create(); 
     if ($this->Admin->validates()) { 
      // it validated logic 
      if ($this->Admin->save($this->request->data)) { 
       $this->Session->setFlash(__('The admin has been saved.')); 
       return $this->redirect(array('action' => 'index')); 
      } else { 
       $this->Session->setFlash(__('The admin could not be saved. Please, try again.')); 
      } 
     } else { 
      // didn't validate logic 
      $errors = $this->Admin->validationErrors; 
      debug($errors); 
     } 
    } 
} 

mais il ne fonctionne pas. Si je passe un champ vide, une alerte avec un message par défaut est affichée dans la page add.ctp. Si j'insère un doublon, aucun message n'est affiché.

Répondre

1

Vous n'avez pas besoin

$this->Admin->set($this->request->data); 
$this->Admin->validates(){} 

parce que si vous utilisez "Enregistrer"

$this->Admin->save($this->request->data) 

est déjà en train de valider. Cela devrait faire le travail.

+0

ok, mais comment puis-je attraper et afficher des messages d'erreur de validation? – giozh

+0

J'ai ajouté $ this-> Admin-> set ($ this-> request-> data); à ma réponse. Si vous utilisez "save" vous n'avez pas besoin de -> set() et -> validates(). – mart