2009-07-01 8 views
0

Quelqu'un peut-il m'aider avec un exemple clair et complet sur la façon de définir des validations pour 2 champs, par exemple un email et un mot de passe, avec des messages d'erreur?valider fonction dans cakephp

De ma compréhension, le bon format est:

var $validate = array(
    'password' => array(
     'rule' => array('minLength', '8'), 
     'message' => 'Minimum 8 characters long' 
    ), 
    'email_id' => array('email') 
    ); 

, mais je ne peux pas sembler le faire fonctionner (montrer un message de validation, ou mettre un terme à l'exécution de l'action) dans mes tests.

Les validations fonctionnent bien mais aucun moyen d'afficher les messages personnalisés!

EDIT

Les validations et redirections page fonctionne bien maintenant. Seuls les messages spécifiques n'apparaissent pas. C'est-à-dire que si je saisis un mot de passe de moins de 8 caractères, le message "8 caractères minimum requis" doit apparaître immédiatement ou après avoir cliqué sur le bouton Enregistrer. Y a-t-il une méthode pour le faire?

EDIT 2

Mon point de vue fichier

<!-- File: /app/views/forms/index.ctp --> 

    <?php 
    echo $javascript->link('prototype.js'); 
    echo $javascript->link('scriptaculous.js'); 
    echo $html->css('main.css'); 
?> 

    <div id="register"> 
    <h3>Register</h3> 
    <?php 
    echo $form->create('User',array('action'=>'register')); 
    echo $form->input('User.name'); 
    echo $form->input('User.email_id'); 
    echo $form->input('User.password'); 
    echo $form->end('Register'); 
    ?> 
    </div> 

    <div id="login"> 
    <h3>Login</h3> 
    <?php 
    echo $form->create('User',array('action'=>'login')); 
    echo $form->input('User.email_id'); 
    echo $form->input('User.password'); 
    echo $form->end('Login'); 
    ?> 
    </div>   

Controller:

<?php 
    class UsersController extends AppController 
    { 

var $name = 'Users'; 
var $uses=array('Form','User','Attribute','Result'); 
var $helpers=array('Html','Ajax','Javascript','Form'); 

function register() 
{ 

    $userId=$this->User->registerUser($this->data); 
    $this->User->data=$this->data; 
     if (!$this->User->validates()) 
     { 
      $this->Flash('Please enter valid inputs','/forms'); 
      return; 
     } 

     $this->Flash('User account created','/forms/homepage/'.$userId);    

} 

function login() 
    { 

    $userId=$this->User->loginUser($this->data); 
    $this->User->data=$this->data; 

    if (!$this->User->validates()) 
     { 
      $this->Flash('Please enter valid inputs','/forms'); 
      return; 
     } 
    if($userId>0){ 
     $this->Flash('Login Successful'); 
     $this->redirect('/forms/homepage/'.$userId); 
     break; 

    } 
    else{ 
     $this->flash('Username and password do not match.','/forms'); 

    } 

} 

} 
?> 

Modèle:

<?php 

    class User extends AppModel { 
     var $name = 'User'; 
    var $components=array('Auth'); 
    var $validate = array(
      'name' => array(
          'rule' => VALID_NOT_EMPTY, 
          'message' =>'Name cannot be null.' 
         ), 
      'password' => array(
         'rule' => array('minLength', '6'), 
         'message' => 'Minimum 6 characters long.' 
         ), 
      'email_id' => array(
         'rule'=> array('email'), 
         'message'=>'Invalid email.' 
         ) 
      ); 

function registerUser($data) 
{ 
    if (!empty($data)) 
    { 
     $this->data['User']['name']=$data['User']['name']; 
     $this->data['User']['email_id']=$data['User']['email_id']; 
     $this->data['User']['password']=$data['User']['password']; 
     if($this->save($this->data)) 
     { 
      $this->data['User']['id']= $this->find('all',array('fields' => array('User.id'), 
           'order' => 'User.id DESC'  
           )); 
      $userId=$this->data['User']['id'][0]['User']['id']; 
      return $userId; 
     } 
    } 
} 

function loginUser($data) 
{ 
    $this->data['User']['email_id']=$data['User']['email_id']; 
    $this->data['User']['password']=$data['User']['password'];   

    $login=$this->find('all'); 
    foreach($login as $form): 
     if($this->data['User']['email_id']==$form['User']['email_id'] && $this->data['User']['password']==$form['User']['password']) 
     { 
      $this->data['User']['id']= $this->find('all',array('fields' => array('User.id'), 
           'conditions'=>array('User.email_id'=> $this->data['User']['email_id'],'User.password'=>$this->data['User']['password'])  
           )); 
      $userId=$this->data['User']['id'][0]['User']['id']; 

      return $userId; 

     } 
    endforeach; 
} 
    } 
?> 

Répondre

4

Voici un exemple vivant de mon projet ..

Voici comment configurer votre validation dans votre modèle: Article model

ignorer le fait que j'initialisant le tableau de validation du constructeur, vous pouvez continuer à le faire comme vous le faites maintenant, si vous n » t plan sur la mise en œuvre de I18n et L10n.

erreurs de validation de manipulation dans le contrôleur: Articles controller

De la ligne 266-280 vous pouvez voir la validation et enregistrer les erreurs manipulées avec setFlash() + retour.

C'est à peu près tout ce que vous devez faire, mais n'oubliez pas que vous avez besoin de use the FormHelper for your forms pour que les messages fonctionnent comme prévu.

Erreur commune: vous devez et non faire un $ this-> redirect() après l'échec de la validation.

Espérons que cela vous mettra sur la bonne voie :)

+0

Maintenant, si je donne la mauvaise entrée, il est redirigé vers la page/utilisateurs/registre et affiche le contenu comme suit: S'il vous plaît corriger les erreurs ci-dessous Introuvable Erreur: L'adresse demandée '/ users/register' n'a pas été trouvé sur ce serveur. Je ne reçois pas l'erreur spécifique comme "Email invalide" ou "Le champ Nom ne doit pas être vide". Et aussi Comment puis-je le rediriger vers la page de connexion, si les entrées invalides sont entrées? – Angeline

+0

Il semble que vous ayez un composant Auth mal configuré qui empêche l'apparition de ces messages d'erreur spécifiques. Vous devriez vraiment essayer de commenter des parties de votre code et vérifier quel bit vous cause des problèmes. –

+0

Dois-je avoir le composant Auth pour afficher ces erreurs? Je viens de cheched mon dossier de composants (dans le dossier de l'application) et je n'ai pas le fichier auth.php. – Angeline