2009-07-30 6 views
0

J'essaie d'utiliser les fonctions de validation intégrées de cakePHP pour ma page d'enregistrement/connexion.Comment faire pour afficher les messages d'erreur de validation intégrés de CakePHP?

<?php 
class User extends AppModel 
{ 
    var $name = 'User'; 
    var $validate = array(
          'name' => VALID_NOT_EMPTY, 
          'password' => VALID_NOT_EMPTY, 
          'email_id' => VALID_EMAIL 
         ); 
} 

Je n'ai pas de fichier de vue séparé pour le registre ou la connexion. J'ai à la fois le code d'enregistrement et de connexion de l'application dans un contrôleur principal et les vues dans un seul fichier index.ctp. Si l'enregistrement ou la connexion est valide, la page est redirigée vers la page d'accueil du contrôleur principal.

class UsersController extends AppController 
{ 
    var $name = 'Users'; 
    var $helpers = array('Html', 'Form'); 

    function register() 
    { 
    if (!empty($this->data)) 
     { 
     if ($this->User->save($this->data)) 
     { 
      $this->Session->setFlash('Your registration information was accepted.'); 
      $this->redirect('/main/home'); 
     } 

     } 
    } 
} 

index.ctp

<p>Please fill out the form below to register an account.</p> 
<?php 
     echo $form->create('User', array('action' => 'register')); 
     echo $form->input('name'); 
     echo $form->input('email_id'); 
     echo $form->input('password'); 
     echo $form->end('Register'); 
?> 

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

Est-ce la raison pour laquelle, les messages d'erreur personnalisés ne sont pas affichés. Parce que, si j'ai un fichier de vue séparé pour le module de registre, alors je reçois les messages personnalisés. Mais je ne veux pas de fichier de vue de registre distinct et de fichier de vue de connexion séparé. Je veux avoir les deux fonctions dans le fichier d'index du contrôleur principal. Pourriez-vous m'aider?

EDIT 1

Si j'utilise rendre, ce que je reçois dans le navigateur.

Votre inscription a échoué.

Introuvable

Erreur: L'adresse demandée '/ users/register' n'a pas été trouvé sur ce serveur.

Ceci est la fonction de registre dans le contrôleur principal:

function register() 
    { 
     if (!empty($this->data)) 
     { 
     if ($this->User->save($this->data)) 
     { 
      $this->Session->setFlash('Your registration information was accepted.'); 
      $this->render('home'); 
     } 
     else 
     { 
      $this->Session->setFlash('Your registration failed.'); 
      $this->render('index'); 
     } 

     } 
    } 

Répondre

0

Il pourrait y avoir un conflit en cours parce que vous créez deux formes qui utilisent le même modèle. Si vous commentez le formulaire de connexion, les messages d'erreur s'affichent-ils alors?

+0

Les messages d'erreur sont affichés uniquement lorsque j'ai un fichier register.ctp distinct dans le dossier views/users. Si je redirige le contrôle vers la page principale, lorsque l'enregistrement échoue, j'obtiens le message Session setFlash mais pas les messages d'erreur. Ce n'est que s'il existe un fichier de vue séparé pour l'action de registre que les messages d'erreur s'affichent. – Angeline

+0

Les messages de validation seront rechargés dans la vue et ne seront pas stockés dans la session contrairement à setFlash. Si vous redirigez, vous perdrez effectivement les messages d'erreur. Vous devrez peut-être utiliser $ this-> render ('index') dans le contrôleur pour la méthode de registre, vous n'avez donc pas besoin d'une redirection. – MSR

Questions connexes