Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/09/2011, 11h41   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 10
Points : 1
Points : 1
Par défaut Associer un callback à un champ en particulier

Bonjour,

Je débute avec symfony et je me vois actuellement confronté à un problème disons... d'"affichage".

Voilà comment j'affiche mes erreurs sur mon formulaire :



Comme vous pouvez le voir, l'erreur associé à un champ donné s'affiche à droite de celui-ci. Donc ça fonctionne bien pour les erreurs associées à un champ donné. Mais lorsque ce sont des erreurs globales, comment peut-on faire ? Ou plus simplement, comment associer un callback à un champ en particulier ?

Voici le code que j'utilise (peut-être pas trop optimisé) pour afficher l'erreur lié à un champ :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<li>
    <?php if ($form["pseudo"]->hasError()): ?>
    <div class="blocErrorInput">
        <label for="membre_pseudo">Nom d'utilisateur</label> 
        <?php echo $form["pseudo"]->render() ?>
        <div class="blocErrorInputDisp">
            <img src='images/design/defaut/icones/forbidden.gif' style='vertical-align:-3px;' /> <i><?php echo $form["pseudo"]->getError(); ?></i>
        </div>
    </div>
    <?php else: ?>
        <label for="membre_pseudo">Nom d'utilisateur</label> 
        <?php echo $form["pseudo"]->render() ?>
    <?php endif; ?>
</li>
Le truc c'est que la vérification de disponibilité d'un pseudo (s'il est déjà utilisé par un autre membre ou pas) se fait avec un CallBack qui soulève une erreur globale (qui fonctionne) mais que je ne peux pas afficher en face de chaque champ.

Voici le code utilisé pour afficher l'erreur de "pseudo utilisé" (et email au passage) :

Code :
1
2
3
4
5
6
7
8
9
  $this->validatorSchema->setPostValidator(
          new sfValidatorAnd
                  (
                    array(
                        new sfValidatorCallback(array('callback'=> array($this, 'checkLoginAvailability'))),
                        new sfValidatorCallback(array('callback'=> array($this, 'checkEmailAvailability')))
                        )
                  )
  );
Si vous avez compris mon problème, pourriez-vous m'aider ?

Merci d'avance !
axool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2011, 21h03   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Le problème ne vient pas tant du callback que du fait que ton validateur est un postValidateur.

Ceux-ci ne sont pas attribué à un champ en particulier mais au formulaire en général.

Tu peux parfaitement utiliser un callback sur un champ en particulier, ce qui devrait donner l'effet escompté. Tu peux aussi utiliser un validatorAnd sur un champ en particulier, si tu veux cumuler, pour se champ, plusieurs validateurs différents.

Accessoirement, pense à sortir ton style de ton modèle et à utiliser une CSS, ton site n'en sera que plus simple à maintenir
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h41.


 
 
 
 
Partenaires

Hébergement Web