salut à tous, j'aimerais savoir comment faire pour affichers les notifications sur les champs input des formulaires. en effet je veus que lorsque un input a des donées invalides, que l'input se colore en rouge et un message de notification qui s'affiche du genre fadeIn de Jquery avec un message d'erreur.
Op pinaise des pinaise comme dit Hommer, j'ai trouvé la solution pour les messages d'érreurs en effet l'orsque la sauvegarde echouait je fesais une redirection directement ce qui effaçai les messages de validation directement .
Bonjour.
Pour les erreurs de validations, il te faut ajouter les règles de validation dans le modèle correspondant.
Ensuite, pour ce qui concerne le design de l'affichage des erreurs au niveau des inputs du formulaire, ce n'est rien de plus qu'avec du css qu'il te faut le coder et concernant le fadeIn, comme tu l'as dit, c'est avec jQuery et donc avec du javascript.
Donc, à toi de faire le nécessaire.
oui j'ai ajouté des règles de validation dans mon model mais le soucis est que lorsque qu'il y'a erreur c'est la page de gestion des erreurs de cake qui apparait avec le message d'erreur de validation moi je veus just affiché un message d'erreur près du de l'input en question
La page de gestion des erreurs ?
Ce n'est pas une erreur de validation de formulaire qui est retournée alors, mais une erreur de requête.
Il te faut savoir faire la différence entre les deux.
J'aimerai savoir comment faire pour capturer l'erreur de validation d'un input et l'afficher dans la vue
Nous n'allons pas avancer de cette manière.
Pour les erreurs de validations de formulaire, CakePHP fait l'affichage des erreurs automatiquement au niveau des inputs concernés.
Mais seulement si c'est une erreur de validation qui est défini dans le modèle s'y reportant et si bien sûr si c'est une erreur de validation.
lorsque qu'il y'a erreur c'est la page de gestion des erreurs de cake
Il n'y a pas de page prédéfinie pour les erreurs de validation de formulaire, donc l'erreur qui doit être retournée dans ce cas là doit être une erreur de type 400 ou 500 et non une erreur de validation.
Merci voici ce que je fais dans mon model utilisateur j'ai ceci
<?php
class Utilisateur extends AppModel
{
public $hasOne = 'Compte';
public $validate = array(
'nom_utilisateur'=>'Numeric',
'message'=>'ce champ doit être numeric'
);
}
?>
dans mon controleur j'ai ceci
public function saveUser()
{
$this->layout = 'page';
$this->set('title_for_layout','Finalisation de l\'inscription');
if($this->request->is('post'))
{
if(!empty($this->request->data))
{
$this->Utilisateur->set($this->request->data);
if($this->Utilisateur->validates())
{
$user = $this->Utilisateur->save($this->request->data);
if(!empty($user))
{
$this->request->data['Compte']['utilisateurs_id'] = $this->Utilisateur->id;
$this->Utilisateur->Compte->save($this->request->data);
$this->Session->setFlash('Votre compte as été mis à jour avec succès','default',array('class'=>'alert alert-success'));
return $this->redirect(array('action' => 'saveUser'));
}
else
{
$this->Session->setFlash('Votre compte n\' as pas été suprimer avec succès','default',array('class'=>'alert alert-warning'));
return $this->redirect(array('action' => 'inscription'));
}
}
else
{
$this->Session->setFlash('erreur de remplissage du formulaire','default',array('class'=>'alert alert-info'));
return $this->redirect(array('action' => 'saveUser'));
}
}
}
}
et dans la vue j'ai ceci
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title" >Informations personnelles</h3>
</div>
<div class="panel-body">
<?php
echo $this->Form->create('Utilisateur', array('action'=>'saveUser','class'=>'form-inline','id'=>'nouvel_user','fieldset'=>array('legend'=>'Nouvel user')));?>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.nom_utilisateur', array('label'=>' Nom ','class'=>'form-control','placeholder'=>'Votre nom','required'=>true));?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.prenom_utilisateur', array('label'=>' Prénom ','class'=>'form-control','placeholder'=>'Votre prénom','required'=>true));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Compte.pseudo_compte', array('label'=>'Votre Pseudo ','id'=>'id_pseudo','class'=>'form-control error','placeholder'=>'Votre Pseudo','required'=>true,'type'=>'text',"onchange"=>"
$.get(
'". $this->Html->url(array('controller'=>'Comptes','action'=>'pseudo_exist'), true) ."',
{
user_find: $('#id_pseudo').val()},
function(data)
{
var obj=jQuery.parseJSON(data);
$('#id_pseudo').val('').css('border-color','red');
}
);
return false;"));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Compte.motdepass_compte', array('label'=>' Password ','class'=>'form-control','placeholder'=>'Votre mot de passe','required'=>true,'type'=>'password'));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.sexe_utilisateur', array('label'=>' Sexe ','class'=>'form-control','placeholder'=>'Votre sexe','required'=>true,'options'=>array('Masculin','Feminin'),'empty'=>'(Choississez)'));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.tel_utilisateur' ,array('label'=>' Numéro de téléphone ','class'=>'form-control','id'=>'num_tel','placeholder'=>'Votre Numéro de téléphone','required'=>true,'type'=>'tel',"onchange"=>"
$.get(
'". $this->Html->url(array('controller'=>'Utilisateur','action'=>'phone_exist'), true) ."',
{
tel_find: $('#num_tel').val()},
function(data)
{
var obj=jQuery.parseJSON(data);
$('#num_tel').val('').css('border-color','red');
}
);
return false;"));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.email_utilisateur', array('label'=>'Addresse email ','class'=>'form-control','placeholder'=>'Votre addrsse email','required'=>true,'type'=>'email','error'=>array('attributes'=>array('class'=>'warning'))));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.fonction', array('label'=>' Fonction ','class'=>'form-control','placeholder'=>'Votre Fonction','required'=>true,'type'=>'text'));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.addresse', array('label'=>' Addresse ','class'=>'form-control','placeholder'=>'Votre Addresse','required'=>true,'type'=>'text'));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Compte.etat_caisse', array('type'=>'hidden','value'=>10));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Compte.fonctionnement', array('type'=>'hidden','value'=>0));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Compte.groupes_id', array('type'=>'hidden','value'=>2));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Compte.utilisateurs_id', array('type'=>'hidden'));
?></div>
<div class="col-md-10 line-input"><p ><?php
echo $this->Form->button('Suivant', array('type'=>'submit','class'=>'btn btn-primary '));
echo $this->Form->button('Annuler', array('type'=>'reset','class'=>'btn btn-default '));
echo $this->Form->end();
?></p>
</div>
</div>
</div>
<div class="clearfix"></div>
lorsque je rempli le champ par un texte j'ai plutot mon message test du controleur qui m'afiche et non le message de validation de cake comme vous le dite
Pour commencer, la règle de validation n'est pas bien constituée.
Elle devrait plutôt être comme ceci :
public $validate = array(
'nom_utilisateur' => array(
'rule' => 'alphaNumeric', // et non numeric à mon avis
'message' => 'Le message voulu
)
);
Ensuite, il y a plusieurs erreurs dans le controlleur.
Comme par exemple la méthode set qui permet de mettre à jour un enregistrement, alors que d'après certains inputs du formulaire, vous vérifiez l’existence dans la table, par conséquent, ce serait la création d'un enregistrement, ce qui est totalement contradictoire.
Pour terminer, le code de la vue et plus particulièrement le formulaire est assez brouillon, je vous conseille vivement de créer un bloc de code javascript en dehors du formulaire en utilisant les sélecteurs d'éléments pour les différents inputs du formulaire.
*P.S. : Il y a des erreurs au niveau du nom du controlleur dans les paramètres d'url
Merci "Lartak" pour ta précision je viens de faire des modifications dans mon controleur et model, jusqu'ici j'arrive a bien faire mes enregistrements mais mon soucis est de pouvoir géré les messages d'érreurs des imputs car jusqu'ici cela ne fonctionne pas voic de nouveau mon model:
<?php
class Utilisateur extends AppModel
{
public $hasOne = 'Compte';
public $validate = array(
'nom_utilisateur'=> array(
'rule'=>'alphaNumeric',
'message'=>'ce champ doit être numeric')
);
}
?>
mon controleur
public function saveUser()
{
$this->layout = 'page';
$this->set('title_for_layout','Finalisation de l\'inscription');
if($this->request->is('post'))
{
if(!empty($this->request->data))
{
//$this->Utilisateur->set($this->request->data);
if($this->Utilisateur->validates())
{
$user = $this->Utilisateur->save($this->request->data,true);
if(!empty($user))
{
$this->request->data['Compte']['utilisateurs_id'] = $this->Utilisateur->id;
$this->Utilisateur->Compte->save($this->request->data);
$this->Session->setFlash('Votre compte as été mis à jour avec succès','default',array('class'=>'alert alert-success'));
return $this->redirect(array('action' => 'saveUser'));
}
else
{
$this->Session->setFlash('Votre compte n\' as pas été suprimer avec succès','default',array('class'=>'alert alert-warning'));
return $this->redirect(array('action' => 'saveUser'));
}
}
else
{
debug($this->Utilisateur->validationErrors);
$this->Session->setFlash('erreur de remplissage du formulaire','default',array('class'=>'alert alert-info'));
return $this->redirect(array('action' => 'saveUser'));
}
}
}
}
et enfin la vue:
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title" >Informations personnelles</h3>
</div>
<div class="panel-body">
<?php
echo $this->Form->create('Utilisateur', array('action'=>'saveUser','class'=>'form-inline','id'=>'nouvel_user','fieldset'=>array('legend'=>'Nouvel user')));?>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.nom_utilisateur', array('label'=>' Nom ','class'=>'form-control','placeholder'=>'Votre nom','required'=>true));?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.prenom_utilisateur', array('label'=>' Prénom ','class'=>'form-control','placeholder'=>'Votre prénom','required'=>true));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Compte.pseudo_compte', array('label'=>'Votre Pseudo ','id'=>'id_pseudo','class'=>'form-control error','placeholder'=>'Votre Pseudo','required'=>true,'type'=>'text',"onchange"=>"
$.get(
'". $this->Html->url(array('controller'=>'Comptes','action'=>'pseudo_exist'), true) ."',
{
user_find: $('#id_pseudo').val()},
function(data)
{
var obj=jQuery.parseJSON(data);
$('#id_pseudo').val('').css('border-color','red');
}
);
return false;"));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Compte.motdepass_compte', array('label'=>' Password ','class'=>'form-control','placeholder'=>'Votre mot de passe','required'=>true,'type'=>'password'));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.sexe_utilisateur', array('label'=>' Sexe ','class'=>'form-control','placeholder'=>'Votre sexe','required'=>true,'options'=>array('Masculin','Feminin'),'empty'=>'(Choississez)'));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.tel_utilisateur' ,array('label'=>' Numéro de téléphone ','class'=>'form-control','id'=>'num_tel','placeholder'=>'Votre Numéro de téléphone','required'=>true,'type'=>'tel',"onchange"=>"
$.get(
'". $this->Html->url(array('controller'=>'Utilisateur','action'=>'phone_exist'), true) ."',
{
tel_find: $('#num_tel').val()},
function(data)
{
var obj=jQuery.parseJSON(data);
$('#num_tel').val('').css('border-color','red');
}
);
return false;"));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.email_utilisateur', array('label'=>'Addresse email ','class'=>'form-control','placeholder'=>'Votre addrsse email','required'=>true,'type'=>'email','error'=>array('attributes'=>array('class'=>'warning'))));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.fonction', array('label'=>' Fonction ','class'=>'form-control','placeholder'=>'Votre Fonction','required'=>true,'type'=>'text'));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Utilisateur.addresse', array('label'=>' Addresse ','class'=>'form-control','placeholder'=>'Votre Addresse','required'=>true,'type'=>'text'));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Compte.etat_caisse', array('type'=>'hidden','value'=>10));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Compte.fonctionnement', array('type'=>'hidden','value'=>0));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Compte.groupes_id', array('type'=>'hidden','value'=>2));
?></div>
<div class="col-md-10 line-input"><?php
echo $this->Form->input('Compte.utilisateurs_id', array('type'=>'hidden'));
?></div>
<div class="col-md-10 line-input"><p ><?php
echo $this->Form->button('Suivant', array('type'=>'submit','class'=>'btn btn-primary '));
echo $this->Form->button('Annuler', array('type'=>'reset','class'=>'btn btn-default '));
echo $this->Form->end();
?></p>
</div>
</div>
</div>
<div class="clearfix"></div>
il faut noté que les requêtes ajax fonctionnes aussi parfaitement
mon soucis est de pouvoir géré les messages d'érreurs des imputs
Vu que tu n'as qu'une règle de validation dans ton modèle, CakePHP ne peut t'en retourner plus.
Pour qu'il t'en retourne plus, il faut que tu en définisses pour chacun des champs que tu veux vérifier.
en demandez plus?, lorsque je prend le tutos de cakeph pour la création d'un blog, il n'y a que 2 champs title et body en appliquand les règles de validations cela fonctionne correctement mais lorsque je prend par exemple mon formulaire avec un seul champ ça ne passe toujours pas par exemple je fais ceci:```
<?php
class Groupe extends AppModel
{
public $validate =array(
'nom_groupe' => array(
'rule' => array('minLength',5),
'message' => 'Votre groupe doit contenir plus de 5 caractères')
);
public $belongsTo = array(
'Compte'=>array(
'className'=>'Compte',
'foreignKey'=>'id'
)
);
public function beforeSave($options = array())
{
if(!empty($this->data[$this->alias]['nom_groupe']))
{
$nom = $this->data[$this->alias]['nom_groupe'];
if($this->find('count', array('conditions'=>array('Groupe.nom_groupe'=>$nom))))
return false;
else
return true;
}
return false;
}
}
?>
et dans ma vue j'ai ceci:
<?php
echo $this->Session->flash();
?>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Ajouter un groupe</h3>
</div>
<div class="panel-body">
<?php
echo $this->Form->create('Groupe', array('action'=>'save_groupe','class'=>'form-inline','id'=>'nouveau_groupe')); ?>
<div class="col-md-12 line-input">
<?php
echo $this->Form->input('nom_groupe', array('label'=>'Entrez le nom du groupe ','class'=>'form-control','size'=>50,'placeholder'=>'Nom de votre groupe','required'=>true,));
?>
</div>
<div class="col-md-10 line-input"><p class="pull-right"><?php
echo $this->Form->button('Enregistrer ', array('type'=>'submit','class'=>'btn btn-primary btnvalider '));
echo $this->Form->button('Annuler', array('type'=>'reset','class'=>'btn btn-default btnannuler'));
echo $this->Form->end();
?></p>
</div>
</div>
<div class="panel-footer"></div>
</div>
d'abord j'ai cru un seul instant que cela venait peut être du fait que j'avais beaucoup de champ, mais avec un seul je n'observe toujours pas de resultat j'utilise bootstrap 1.3, la je suis vraiment surpris
a l'aide s'il vout plait
Salut?Je ne sais pas s'il va faloir corriger tout ton code ou s'il faut que je corrige que ce qui est en rapport avec le sujet parceque c'est assez assez incohérant .
Alors c'est parti
public function saveUser(){
$this->layout = 'page';
/**Ce serait pas prudent de definir le title for layout au niveau de la vue??C'est ce que je fait d'habitude **/
$this->set('title_for_layout','Finalisation de l\'inscription');
if($this->request->is('post') && !empty($this->request->data)){
$user = $this->Utilisateur->save($this->request->data);
if(!empty($user)){
$this->request->data['Compte']['utilisateurs_id'] = $this->Utilisateur->id;
if( $this->Utilisateur->Compte->save($this->request->data)){
$this->Session->setFlash('Votre compte as été mis à jour avec succès','default',array('class'=>'alert alert-success'));
return $this->redirect(array('action' => 'saveUser'));
}
}elseif(empty($user)){
$this->Session->setFlash('Votre compte n\' as pas été suprimer avec succès','default',array('class'=>'alert alert-warning'));
return $this->redirect(array('action' => 'inscription'));
}
}else{
$this->Session->setFlash('erreur de remplissage du formulaire','default',array('class'=>'alert alert-info'));
return $this->redirect(array('action' => 'saveUser'));
}
}
Essai ca et Renvoie moi les retours
comme resultat çela enregistre bien les données mais me renvoit vers une page inexistant avec comme lien ceci:
http://localhost/networksolution/utilisateurs/saveUser
Oui le probleme viens de la page de redirection ou la vue de redirection.Essai ca
if( $this->Utilisateur->Compte->save($this->request->data)){
$this->Session->setFlash('Votre compte as été mis à jour avec succès','default',array('class'=>'alert alert-success'));
$this->redirect(array('action' => '/'));
}
Ceci renvera l'utilisateur vers la home apres succes de l'opération
ok c'est bon pour la redirection j'ai trouvé le problème maintenant je coince toujours pour la validation des champs mal saisis, je n'ai aucun message de cakephp qui s'affiche par exemple j'ai ceci dans mon controleur comptes:
<?php
App::uses('SimplePasswordHasher','Controller/Component/Auth');
class Compte extends AppModel
{
public $belongsTo = 'Utilisateur';
public $validate= array(
'motdepass_compte' => array(
'rule1'=>array('rule'=>'alphaNumeric','message'=>'Uniquement des lettres et des chiffres','last'=>false),
'rule2'=>array('rule'=>array('minLength',8),
'message'=>'Votre mot de pass doit contenir plus de 8 caractères')),
'pseudo_compte'=>array(
'rule'=>array('minLength',5),
'message'=>'Votre Pseudo doit contenir plus de 5 caractères'));
public function beforeSave($options = array())
{
if(!empty($this->data[$this->alias]['motdepass_compte']))
{
$passwordHasher = new SimplePasswordHasher(array('hashType'=>'sha256'));
$this->data[$this->alias]['motdepass_compte'] = $passwordHasher->hash($this->data[$this->alias]['motdepass_compte']);
}
return true;
}
}
?>
et lorsque je f'ait un enregistrement, la table utilisateur est mis a jour normalement mais pas la table compte j'ai juste une page pointant vers l'action saveUser du controlleur utilisateur, et sans message flash
Bonjour,
Si j'ai bien compris ta demande, tu aimerais que le champ dans ton formulaire qui n'est pas valide soit coloré en rouge par exemple (comme ici sur bootstrap). Si c'est bien ça, voici ce que j'ai sous cakephp 3 pour mon login.ctp :
<?= $this->Form->create() ?>
<div class="form-group <?= ($this->Form->error('username')) ? 'has-error' : '' ?>">
<div class="input-group">
<span class="input-group-addon">
<i class="fa fa-user"></i>
</span>
<?= $this->Form->input(
'username',
[
'label' => false,
'class' => 'form-control',
'placeholder' => __("Nom d'utilisateur"),
'required' => 'required',
'error' => false
]
) ?>
</div>
<?= $this->Form->error('username') ?>
</div>
<div class="form-group <?= ($this->Form->error('password')) ? 'has-error' : '' ?>">
<div class="input-group">
<span class="input-group-addon">
<i class="fa fa-lock" style="padding-left:2px;"></i>
</span>
<?= $this->Form->input(
'password',
[
'label' => false,
'class' => 'form-control',
'placeholder' => __("Mot de passe"),
'required' => 'required',
'error' => false
]
) ?>
</div>
<?= $this->Form->error('password') ?>
</div>
<div class="form-group">
<a href="#">Mdp oublié ?</a>
</div>
<div class="form-group">
<?= $this->Form->button(
__('Connexion {0}', '<i class="fa fa-check"></i>'),
['class' => 'btn btn-danger']
); ?>
</div>
<?= $this->Form->end(); ?>
Regarde bien le 'form-group' avec 'has-error' et 'Form->error'. Il y a une condition dans le 'form-group' pour savoir qu'elle class afficher. Si 'Form->error' contient une erreur, alors tu auras ton input rouge avec 'has-error'. Sinon rien. Ensuite, sous le input, on remet 'Form->error' pour afficher le message qui se trouve dans ton 'validate'. C'est pour cela que Lartak te demande de mettre pour chaque champs une validation.
Si tu es sous cakephp 2.*, ça doit sensiblement être pareil, à toi d'ajuster. ;)
ok merci jeremyB je vais alors mettre une règle sur chaque champ, mais moi j'utilise bootstrap 1.3.1 couplé à cake 2.5.3
je viens de mettre les control sur chaque champ de mon formulaire voici ce que j'ai enfin dans mon model Utilisateur :```
<?php
class Utilisateur extends AppModel
{
public $hasOne = 'Compte';
public $validate = array(
'nom_utilisateur'=> array(
'rule'=>'alphaNumeric',
'message'=>'ce champ doit contenir des lettres et chiffres'),
'prenom_utilisateur' => array(
'rule'=>'alphaNumeric',
'message'=>'ce champ doit contenir des lettres et chiffres'
),
'sexe_utilisateur'=> array(
'required'=>true,
'message'=>'Veuillez sélectionnez un champ'),
'tel_utilisateur'=> array(
'rule'=>'Numeric',
'message'=>'Veuillez sélectionnez un champ'),
'email_utilisateur'=> array(
'rule'=>'email',
'message'=>'Veuillez saisir un email valide'),
'fonction'=> array(
'rule'=>'alphaNumeric',
'message'=>'Veuillez saisir une fonction valide'),
'addresse'=> array(
'rule'=>'alphaNumeric',
'message'=>'Veuillez saisir une addresse valide'),
);
}
?>
et toujours pas de trace de gestion d'erreur de cakephp
je viens de mettre les control sur chaque champ de mon formulaire voici ce que j'ai enfin dans mon model Utilisateur :```
<?php
class Utilisateur extends AppModel
{
public $hasOne = 'Compte';
public $validate = array(
'nom_utilisateur'=> array(
'rule'=>'alphaNumeric',
'message'=>'ce champ doit contenir des lettres et chiffres'),
'prenom_utilisateur' => array(
'rule'=>'alphaNumeric',
'message'=>'ce champ doit contenir des lettres et chiffres'
),
'sexe_utilisateur'=> array(
'required'=>true,
'message'=>'Veuillez sélectionnez un champ'),
'tel_utilisateur'=> array(
'rule'=>'Numeric',
'message'=>'Veuillez sélectionnez un champ'),
'email_utilisateur'=> array(
'rule'=>'email',
'message'=>'Veuillez saisir un email valide'),
'fonction'=> array(
'rule'=>'alphaNumeric',
'message'=>'Veuillez saisir une fonction valide'),
'addresse'=> array(
'rule'=>'alphaNumeric',
'message'=>'Veuillez saisir une addresse valide'),
);
}
?>
et toujours pas de trace de gestion d'erreur de cakephp
lorsque je f'ait un enregistrement, la table utilisateur est mis a jour normalement mais pas la table compte
Regardes de ce côté là : Sauvegarder des associations de model en une seule fois.
Merci lartak, j'ai déja inspecté cela, mon souci jusqu'ici c'est de pouvoir controler mes champs de validation en affichant les messages d'erreur sur des input non valide jusqu'ici eyant crée même un autre formulaire avec un autre model toujours rien
voici mon model Groupe :```
<?php
class Groupe extends AppModel
{
public $validate =array(
'nom_groupe' => array(
'rule' => array('minLength',5),
'message' => 'Votre groupe doit contenir plus de 5 caractères')
);
public $belongsTo = array(
'Compte'=>array(
'className'=>'Compte',
'foreignKey'=>'id'
)
);
}
dans ma vue j'ai ceci
: ```
<?php
echo $this->Session->flash();
?>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Ajouter un groupe</h3>
</div>
<div class="panel-body">
<?php
echo $this->Form->create('Groupe', array('action'=>'save_groupe','class'=>'form-inline','id'=>'nouveau_groupe')); ?>
<div class="col-md-12 line-input">
<?php
echo $this->Form->input('nom_groupe', array('label'=>'Entrez le nom du groupe ','class'=>'form-control','size'=>50,'placeholder'=>'Nom de votre groupe','required'=>true,));
?>
</div>
<div class="col-md-10 line-input"><p class="pull-right"><?php
echo $this->Form->button('Enregistrer ', array('type'=>'submit','class'=>'btn btn-primary btnvalider '));
echo $this->Form->button('Annuler', array('type'=>'reset','class'=>'btn btn-default btnannuler'));
echo $this->Form->end();
?></p>
</div>
</div>
<div class="panel-footer"></div>
</div>
dans mon controleur je fais ceci ```
public function edit($id = null)
{
//$this->set('content',$id_groupe);
if(!$id)
{
throw new NotFoundException(('Identifiant invalide'));
}
$Post = $this->Groupe->findById($id);
if(!$Post)
{
throw new NotFoundException(('Données Invalida'));
}
if($this->request->is(array('post','put')))
{
$this->Groupe->id = $id;
if($this->Groupe->save($this->request->data))
{
$this->Session->setFlash('Votre Groupe as été mis à jour avec succès','default',array('class'=>'alert alert-success'));
return $this->redirect(array('action' => 'index'));
}
//$this->Session->setFlash(__('Impossible de faire la mise a jour avec succès'));
}
if(!$this->request->data)
{
$this->request->data = $Post;
}
$this->layout = 'admin';
}
tout les enregistrements se passe bien mais lorsque dans ma vu j'entre une valeur de 2 caractère aucun message ne s'affiche pour me signalé que mon champ doit avoir plus de 5 caratères la je ne comprend plus rien
Ton formulaire pointe sur l'action save_groupe et tu nous montre l'action edit ?
Je ne vois pas à quoi ça peut nous servir.
je m'escuse voila mon controleur ```
<?php
class GroupesController extends AppController
{
public $theme = 'Administrator';
public $helpers = array('Html','Form');
public $components = array('Session');
public function save_groupe()
{
$this->layout = 'admin';
$this->set('title_for_layout','Boileau, Backend');
if($this->request->is('post'))
{
$this->Groupe->create();
if($this->Groupe->save($this->request->data,array('callbacks'=>true)))
{
$this->Session->setFlash('Votre post as été enregistré avec succès','default',array('class'=>'alert alert-success'));
return $this->redirect(array('action' => 'save_groupe'));
}
$this->Session->setFlash('Erreur de sauvegarde, vos données existe déjà utiliser autre nom','default',array('class'=>'alert alert-warning'));
return $this->redirect(array('controller'=>'Groupes','action' => 'save_groupe'));
}
}
}
?>
les opérations d'enreistregement se passe bien j'arrive a bien affiché les messages flash, mais pas les erreurs de formulaire
if($this->Groupe->save($this->request->data,array('callbacks'=>true))){
$this->Session->setFlash('Votre post as été enregistré avec succès','default',array('class'=>'alert alert-success'));
return $this->redirect(array('action' => 'save_groupe'));
}else{
$this->Session->setFlash('Erreur de sauvegarde, vos données existe déjà utiliser autre nom','default',array('class'=>'alert alert-warning'));
return $this->redirect(array('controller'=>'Groupes','action' => 'save_groupe')); }
Pour tes Notifs du formulaire,Lorsque tu viole entre guillemet les regles de validations que tu as defini dans le modele, est ce que l'erreur est au moin pris en compte sur le champ en question?
oui lorsque je viole les règles de validations, l'erreur est pris en compte mais sans message flash
Si les erreurs de validations sont bien retournées mais que tu ne les vois pas sur ton formulaire, cela doit tout simplement être dû au css
Pour faire simple, les erreurs sont bien affichées, mais tu ne les vois pas car elles ne correspondent pas par rapport à la classe qu'ajoute CakePHP à la base.