2009-07-01 16 views
0

Kann mir jemand mit einem klaren und vollständigen Beispiel helfen, wie man Validierungen für 2 Felder einstellt, eine E-Mail und ein Passwort, mit Fehlermeldungen?Funktion in CakePHP validieren

Von meinem Verständnis, das richtige Format ist:

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

aber ich kann nicht scheinen, um es (zeigen Nachricht eine Bestätigung, oder halt die Ausführung der Aktion) zu erhalten arbeiten in meinen Tests.

Validierungen funktionieren einwandfrei, aber die benutzerdefinierten Nachrichten können nicht angezeigt werden!

EDIT

Die Validierungen und Seite Umleitungen arbeiten jetzt in Ordnung. Nur die spezifischen Nachrichten werden nicht angezeigt. Das heißt, wenn ich ein Passwort mit weniger als 8 Zeichen eingegeben habe, sollte die Meldung "Mindestens 8 Zeichen benötigt" sofort erscheinen oder nachdem ich auf die Schaltfläche "Registrieren" geklickt habe. Gibt es eine Methode, dies zu tun?

EDIT 2

Meine Ansicht Datei

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

    } 

} 

} 
?> 

Modell:

<?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; 
} 
    } 
?> 

Antwort

4

Hier ist ein anschauliches Beispiel aus meinem Projekt ..

Dies ist, wie Sie Ihre Validierung in Ihrem Modell ein: Article model

die Tatsache ignorieren, dass ich die validate Array von Konstruktor bin initialisiert, können Sie es zu tun halten, wie Sie es jetzt tun, wenn Sie don‘ t planen, I18n und L10n zu implementieren.

Handhabung Validierungsfehler in der Steuerung: Articles controller

Von Zeile 266-280 Sie Validierung sehen und speichern können Fehler mit setFlash behandelt werden() + Rückkehr.

Das ist so ziemlich alles, was Sie tun müssen, nur nicht vergessen, Sie müssen use the FormHelper for your forms für die Nachrichten wie erwartet funktionieren.

Allgemeiner Fehler: Sie müssen nicht machen Sie ein $ this-> redirect() nach fehlgeschlagener Validierung.

Hoffentlich werden Sie auf dem richtigen Weg gesetzt :)

+0

Nun, wenn ich den falschen Eingang geben, es auf die Seite/users umgeleitet wird/registrieren und zeigt den Inhalt wie folgt: Bitte korrigieren Sie die unten angegebenen Fehler nicht gefunden Fehler: Die gewünschte Adresse '/ users/register' wurde auf diesem Server nicht gefunden. Ich bekomme nicht den spezifischen Fehler wie "Ungültige E-Mail" oder "Name Feld sollte nicht leer sein". Und wie kann ich es auf die Login-Seite umleiten, wenn die ungültigen Eingaben eingegeben werden? – Angeline

+0

Es klingt, als ob Sie eine falsch konfigurierte Auth-Komponente haben, die verhindert, dass diese spezifischen Fehlermeldungen angezeigt werden. Sie sollten wirklich versuchen, Teile Ihres Codes zu kommentieren und zu überprüfen, welches Bit Ihnen Probleme bereitet. –

+0

Muss ich die Auth-Komponente haben, um diese Fehler anzuzeigen? Ich habe gerade meinen Komponenten-Ordner (im App-Ordner) gecheckt und ich habe keine auth.php-Datei. – Angeline