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