Bonjour,

Je souhaiterais changer la position des messages d'erreurs renvoyés par les variables de validation du modèle. Seulement voilà, même en fouillant sur le net, je n'y parviens pas.

L'idéal serait de pouvoir les passer en en-tête de la page et non pas à côté du formulaire. J'imagine que certains d'entre-vous l'ont déjà fait, car c'est vraiment une "tâche" essentielle.

8 réponses


Les messages d'erreurs se trouvent dans les div de classe error-message : div.error-message
Avec le css je pense que tu dois pouvoir placer les messages ou tu le souhaite

Salut,
Tu parles du message d'erreur globale au formulaire(ex: message non-envoyé), ou celui lié à la validation de l'input(ex: mail erroné)?
Si tu utilises le bootstrap twitter, l'erreur globale correspond à la classe alert-message, pour la validation de l'input la classe est error-message.
Pour l'erreur globale, n'oublie pas que tu as inséré certainement

<?php echo $this->Session->flash(); ?>

dans tes layout pour le positionner sur ta page.

Merci pour vos réponses :)

Je parle des messages liés à la validation de l'input que l'on trouve dans la variable de validation du modèle.

Je souhaiterais l'afficher en haut du document, au même endroit où j'insère :

echo $this->Session->flash();

Je ne suis pas sur de comprendre pourquoi tu veux faire ça. Je pense que pour un internaute, il est plus simple de voir directement sur quel input il a fait une erreur que de lire le message en haut et de revenir sur l'input erroné. Mais bon, si c'est ce que tu veux faire, je vais essayé de trouver une solution avec toi.

Mon soucis, c'est que les messages d'erreurs ne s'affichent même pas à côté des formulaires, pourtant les règles de validation semblent être exécutées.

Voici les différents codes :

<u>Controller</u> :

function signup(){
        if($this->request->is('post')) {
            $d=$this->request->data;
            $d'User']'id'] = null;
            if($d'User']'password'] == $d'User']'password_confirm']) {
                $d'User']'password']=Security::hash($d'User']'password'],null,true);
                if($this->User->save($d,true,array('username','password','mail'))){
                    $this->Session->setFlash("Votre compte a bien été créé.", 'notif', array('type'=>'success'));
                }
            }else {
                    $this->Session->setFlash("Des erreurs inattendues se sont produites, veuillez réitérer votre demande.", 'notif', array('type'=>'error'));
            }
        }
        $this->redirect($this->referer());
    }

<u>Model</u> :

<?php
class User extends AppModel{
    public $validate = array(
        'username' => array(
            array(
                'rule' => 'alphanumeric',
                'required' => true,
                'allowEmpty' => false,
                'message' => "Votre pseudo n'est pas valide"
            ),
            array(
                'rule' => 'isUnique',
                'message' => 'Ce pseudo est déja pris'
            )
        ),
        'mail' => array(
            array(
                'rule' => 'email',
                'required' => true,
                'allowEmpty' => false,
                'message' => "Votre email n'est pas valide"
            ),
            array(
                'rule' => 'isUnique',
                'message' => 'Cet email est déjà pris'
            )
        ),
        'password' => array(
            'rule' => 'notEmpty',
            'message' => "Vous devez entrer un mot de passe",
            'allowEmpty' => false
        )
    );
}

<u>View</u> :

<div id="inscription_pannel_inner">
                           <?php
                           echo $this->Form->create('User', array('action' => 'signup'));
                           echo $this->Html->image('global/icon_username.png', array('alt' => '', 'class' => 'inscription_label_img'));
                           echo $this->Form->input('username',array('label' => array('text'=>'Pseudo', 'class' => 'inscription_label'), 'class'=>'inscription_form', 'value'=>'Nom d\'utilisateur', 'onFocus'=>"javascript:this.value=''"));
                           echo $this->Html->image('global/icon_mail.png', array('alt' => '', 'class' => 'inscription_label_img'));
                           echo $this->Form->input('mail',array('label' => array('text'=>'Adresse Mail', 'class' => 'inscription_label'), 'class'=>'inscription_form', 'value'=>'Votre adresse mail', 'onFocus'=>"javascript:this.value=''"));
                           echo $this->Html->image('global/icon_password.png', array('alt' => '', 'class' => 'inscription_label_img'));
                           echo $this->Form->input('password',array('label' => array('text'=>'Mot de passe', 'class' => 'inscription_label'), 'class'=>'inscription_form', 'value'=>'Password', 'onFocus'=>"javascript:this.value=''"));
                           echo $this->Html->image('global/icon_password_confirm.png', array('alt' => '', 'class' => 'inscription_label_img'));
                           echo $this->Form->input('password_confirm',array('label' => array('text'=>'Confirmation', 'class' => 'inscription_label'), 'class'=>'inscription_form', 'value'=>'confirm', 'type'=>'password','onFocus'=>"javascript:this.value=''"));
                           echo $this->Form->end(array('label' => 'INSCRIPTION', 'class' => 'inner_inscription_button'));
                           ?>
                    </div > <!-- end of inscription_pannel_inner -->

C'est normal que les messages d'erreurs ne s'affichent pas à côté des formulaires ??

inspire toi de ceci :

<?php echo $this->Form->input('username',array(
                            'label'=>"Login ",
                            'before' => "<dt>",
                            'between' => "</dt><dd>",
                            'after' => "</dd>",
                            'format' => array('before', 'label', 'between', 'input', 'error','after'),
                            'div' => false,
                            'error' => array(
                                        'attributes' => array(
                                                'class' => 'invalid-side-note',
                                                'wrap'  => 'span'
                                            )
                                        )
                            )); ?>

tu defini ton format correctement, il permet de positionner ton code par rapport au élement,
par exemple si tu veux ton error au début tu peux le mettre au début :)
Essaye ;)