2010-06-30 6 views
1

J'essaie d'implémenter la validation de formulaire en utilisant des modèles cakephp. Voici mes extraits de code ...Problème de validation de modèle dans Cakephp

Modèle

// File: /app/models/enquiry.php 
class Enquiry extends AppModel { 
    var $name = "Enquiry"; 
    var $useTable = false; 
    var $_schema = array(
     "name"  => array("type" => "string", "length" => 100), 
     "phone"  => array("type" => "string", "length" => 30), 
     "email"  => array("type" => "string", "length" => 255) 
    ); 
    var $validate = array(
     "name" => array(
      "rule" => array("minLength" => 1), 
      "message" => "Name is required" 
     ), 
     "email" => array(
      "emailFormat" => array("rule" => "notEmpty", "last" => true, "message" => "Email is required"), 
      "emailNeeded" => array("rule" => array("email", true), "message" => "Must be a valid email address") 
     ) 
    ); 
} 

action contrôleur

// /app/controllers/nodes_controller.php 
class NodesController extends AppController { 

    var $name = "Nodes"; 
    var $uses = array("Enquiry"); 
    function enquire() { 
     if ($this->data) { 
     $this->Enquiry->set($this->data); 
     $this->Enquiry->set("data", $this->data); 
     if ($this->Enquiry->validates(
       array("fieldList" => array("name", "email")) 
      )) { 
      // ..... 
      } 
     } 
    } 
} 

Voir ....

// /app/views/nodes/enquire.ctp 
<?php echo $form->create("Node", array("action" => "ask")); ?> 
<?php echo $form->input("name", array("label" => "Name")); ?> 
<?php echo $form->input("email", array("label" => "Email")); ?> 
<?php echo $form->input("phone", array("label" => "Phone")); ?> 
<?php echo $form->end("Send");?> 

Mon problème: Sur présentation, la la forme ne valide jamais. La fonction validate renvoie true à chaque fois, même si je ne saisis rien dans le formulaire.

Qu'est-ce que je fais mal?

Cordialement

Répondre

1

Comme vous avez seulement deux règles de validation, il n'y a aucun sens à la liste ces deux champs à valider dans le validates(). Essayez de cette façon:

function enquire(){ 
    if($this->data){ 
     $this->Enquiry->set(this->data); 
     if($this->Enquiry->validates()){ 
      // it validated logic 
     }else{ 
      // didn't validate logic 
     } 
    } 
} 

Votre tableau de validation doit être (suivre la cohérence syntaxique):

var $validate = array(
    'name' => array(
     'notEmpty' => array(
      'rule' => 'notEmpty', 
      'message' => 'Name is required' 
     ) 
    ), 
    'email' => array(
     'emailFormat' => array(
      'rule' => 'notEmpty', 
      'message' => 'Email is required' 
     ), 
     'emailNeeded' => array(
      'rule' => array('email', true), 
      'message' => 'Must be a valid email address' 
     ) 
    ) 
); 
+0

Ce fonctionne. Maintenant, je vois le $ this-> Model-> validates() retournant false, mais je ne vois toujours pas les messages d'erreur apparaissant. Dois-je utiliser la méthode invalidate() dans mon modèle? – vikmalhotra

+0

Je viens de vérifier la matrice invalidFields et il affiche les champs invalides là. Mais les messages d'erreur n'apparaissent pas dans la forme .... – vikmalhotra

+0

C'est étrange. Essayez '$ form-> error ('email');' – bancer

1

Je pense que vos données incorrectes en validates. Après avoir mis $this->data Je voudrais juste appeler

$this->Model->validates(); 
// or 
$this->Model->validates($this->data);