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