Bonjour à tous :)
J'ai un petit problème et je n'arrive absolument pas à comprendre d'où cela peut venir.
Mon problème :
- J'ai un petit formulaire et lorsque je le test pour voir si les erreurs veulent bien s'afficher et bien.....elles ne s'affiches pas....
Je vous joint mon code, si quelqu'un arrive à trouver une bourde que j'aurais fait quelque part et que je n'arrive pas à voir.
Détail :
-
J'ai essayé d'afficher l'erreur dans le formulaire quand j'ajoute un profil, en vain...
-
J'ai donc essayé d'afficher l'erreur avec la fonction validates() et validationErrors de mon model , et là les erreurs de mon formulaire apparaissent bien dans validationErrors.
Ma question :
Pourquoi les erreurs n’apparaissent pas dans mon formulaire et apparaissent dans validationErrors ?
Mon Model Profil.php, pour vous permettre de voir comment sont validées mes données :
<?php
App::uses('AppModel', 'Model');
/**
* Profil Model
*
* @property User $User
*/
class Profil extends AppModel {
/**
* Primary key field
*
* @var string
*/
public $primaryKey = 'id_profil';
public $actsAs = array('Acl' => array('type' => 'requester'));
/**
* Validation rules
*
* @var array
*/
public $validate = array(
'nom_profil' => array(
'alphaAndSpace' => array(
'rule' => array('alphaAndSpace'),
'message' => 'Seul les lettres et les espaces sont autorisés !',
),
'notEmpty' => array(
'rule' => array('notEmpty'),
'message' => 'Vous ne pouvez pas laisser vide le nom du profil !',
),
'unique' => array(
'rule' => array('isUnique'),
'message' => 'Le nom du profil existe déjà !',
),
),
);
//The Associations below have been created with all possible keys, those that are not needed can be removed
/**
* hasMany associations
*
* @var array
*/
public $hasMany = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'profil_id',
'dependent' => false
)
);
public function afterSave($created,$option = array())
{
//Mise a jour de la table aros avec l'alias pour que la gestion des droits fonctionnent
$this->query('UPDATE aros SET alias = "'.$this->data'Profil']'nom_profil'].'" WHERE aros.foreign_key ="'.$this->data'Profil']'id_profil'].'"; ');
}
public function parentNode()
{
return null;
}
public function beforeDelete($cascade = true)
{
$idAro = $this->node()[0]'Aro']'id'];
$this->Aro->delete($idAro);
$this->Behaviors->disable('Acl');
return true;
}
public function alphaAndSpace($check) {
// le tableau $check est passé en utilisant le nom du champ de formulaire comme clé
// nous devons extraire la valeur pour rendre la fonction générique
$valeur = array_values($check);
$valeur = $valeur[0];
return preg_match('|^[a-zA-Z-]*$|', $valeur);
}
}
Mon Controller ProfilsController.php avec la fonction index et add :
<?php
class ProfilsController extends AppController
{
public function index()
{
$this->paginate = array('order' => array('Profil.nom_profil' => 'asc' ));
$profils = $this->paginate('Profil');
$this->set(compact('profils'));
$this->set('listPath',$this->getPathAcos());
$this->set('Acl',$this->Acl);
if($this->request->is('post') || $this->request->is('put'))
{
//Permet la redirection vers la page de modif d'un profil
if(isset($this->request->data'Profil']'profil_id']))
{
$id = $this->request->data'Profil']'profil_id'];
//Si on a recupere un id on essaye de recupere le profil correspondant a cet ID
$profil = $this->Profil->findById_profil($id);
if (!$profil)
{
$this->Session->setFlash("Le profil n'existe pas ! ",'message_erreur');
$this->redirect(array('action'=>'index'));
}
else
{
$this->redirect('/profils/edit/'.$id);
}
}
elseif (isset($this->request->data'Profil']'nom_profil']))
{
$this->add($this->request->data);
}
else
{
$this->Session->setFlash("Action non autorisée !",'message_erreur');
$this->redirect(array('action'=>'index'));
}
}
}
public function add($data = null)
{
if ( $data != null)
{
//Création de l'objet Profil avec les données envoyées dans le POST
$this->Profil->create($data);
//Si l'utilisateur a bien été sauvegardé dans la base on envoie un message flash et on redirige vers index
if ($this->Profil->save(null,true,array('nom_profil')))
{
$this->Session->setFlash("Le Profil a été créé",'message_succes');
$this->redirect(array('controller'=>'profils','action' => 'index'));
}
else
{
//si la sauvegarde a échoué on informe l'utilisateur de l'application qui a voulu enregistré un nouvel utilisateur
$this->Session->setFlash("Le profil n'a pas pu être créé !",'message_erreur');
$this->redirect(array('controller'=>'profils','action' => 'index'));
}
}
else
{
$this->Session->setFlash("Le profil n'a pas pu être créé !",'message_erreur');
$this->redirect(array('action'=>'index'));
}
}
public function beforeFilter()
{
parent::beforeFilter();
//On recupere l'ensemble des données de la table Profil pour pouvoir modifier un utilisateur ou en rajouter un
$searchType=$this->Profil->query('SELECT * FROM profils WHERE nom_profil <> "Admin" AND nom_profil <> "Anonym"');
$tableau_idname = array();
foreach ($searchType as $Idprofil)
{
$tableau_idname$Idprofil'profils']'id_profil']] = $Idprofil'profils']'nom_profil'] ;
}
$this->set('tableau_idname',$tableau_idname);
}
}
?>
Ma vue index.php (juste l'endroit du formulaire):
<!--------- MODAL Ajout Profil -->
<div class="modal fade" id="addProfil" aria-hidden="true" style="display: none;">
<?php echo $this->Form->create('Profil'); ?>
<div id='inputProfil'>
<?php echo $this->Form->input('nom_profil',array(
'label' => 'Nouveau Profil : ',
'maxLength' => 20,
'title' => 'Nouveau Profil',
'required' => true,
)
); ?>
</div>
<div class="modal-footer">
<a class="bouton btn_close" data-dismiss="modal">Fermer</a>
<?php echo $this->Form->end('Ajouter'); ?>
</div>
</div>
J'espère que c'est assez compréhensible comme code :) si non n'hésitez pas à me posez des questions :)
Merci d'avance :)