IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Comment doivent se comporter les formulaires avec un mauvais type de donnée ?


Sujet :

Symfony PHP

  1. #1
    Membre averti

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Points : 364
    Points
    364
    Par défaut Comment doivent se comporter les formulaires avec un mauvais type de donnée ?
    J'ai un formulaire qui contient un champ de type integer et un champs de type number. En faisant des tests de validation, je me suis rendu compte d'un comportement curieux.

    *Pour le champs de type number : si j'entre la valeur "Abc" dans le champs et que je valide le formulaire, j'ai une exception qui est générée lors du bind des valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Expected argument of type "numeric", "boolean" given
    *Pour le champ de type integer : si j'entre la valeur "Abc", il arrive a binder le formulaire et arrive même à le valider. En cherchant je me suis rendu compte qui transformait le la valeur "Abc" en "0".

    Ma question est donc : est ce un comportement normal ou un bug. Si c'est un comportement normal, y a t'il une astuce pour ne pas avoir d'exception dans le cas un (je veux juste que la methode isValid me retourne false. Et pour le second cas, je pense que c'est un bug ? qu'en pensez vous ?

  2. #2
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Points : 172
    Points
    172
    Par défaut
    c'est un comportement normal

    essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ("rrrr" == 0)
    {
    	echo "c'est normal";
    }

    solution :

    is_int ?

    http://us2.php.net/manual/en/function.is-int.php

    Ale

  3. #3
    Membre averti

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Points : 364
    Points
    364
    Par défaut
    C'est normal dans PHP (il convertie implicitement des types) mais ça me parait curieux dans le framework de formulaire nan ? Pour moi je ne devrais pas avoir une exception mais une non validation du formulaire et un message d'erreur dans le template du type "invalid type, number expected" ?

    Dans mon cas j'utiliser le framework de formulaire, c'est pas pour ajouter une couche de validation faite à la main...

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    normalement il le bypass ici :
    https://github.com/symfony/symfony/b...former.php#L72

    mais l'erreur ne semble pas être la même,
    y'a quoi dans tes logs ?

  5. #5
    Membre averti

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Points : 364
    Points
    364
    Par défaut
    si c'est bien à cet endroit qu'il me renvoie l'exception, car is_numeric('Abc') renvoi effectivement false.

    Voici la stack trace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    at NumberToLocalizedStringTransformer ->transform (false)
    in C:\wamp\www\menu\vendor\symfony\src\Symfony\Component\Form\Form.php at line 991  -+
    at Form ->normToClient (false)
    in C:\wamp\www\menu\vendor\symfony\src\Symfony\Component\Form\Form.php at line 542  -+
    at Form ->bind ('Abc')
    in C:\wamp\www\menu\vendor\symfony\src\Symfony\Component\Form\Form.php at line 500  -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [2011-10-12 15:41:13] request.CRITICAL: Symfony\Component\Form\Exception\UnexpectedTypeException: Expected argument of type "numeric", "boolean" given (uncaught exception) at C:\wamp\www\menu\vendor\symfony\src\Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer.php line 73 [] []

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    le type numeric est un peu particulier, puisqu'il n'accepte que un type numeric , mais peut ressortir un chaine,

    exemple : 1234.5
    si tu met ça dans ton champs, il va te sortir en français (depend de la ta locale de session : 1 234,5 (de plus c'est pas un espace mais un espace insécable (non-breakingspace, le fameux  ), donc plus un type numeric
    j'avoue que c'est pas terrible, et y'a pas de validator pour le numeric, j'en ai fait un mais c'est un peux compliquer comme prise en charge, puisqu’il faudrait accepté plusieurs type de nombre qui sont incorrectes au niveau de la locale

    en tout cas pour toi ca peut se changé, suffit de bypasser le is_numeric, fait un rapport de bug, et je corrige ça

  7. #7
    Membre averti

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Points : 364
    Points
    364
    Par défaut
    Ok j'ajoute ca ainsi que le problème du integer github.

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par bilbot Voir le message
    Ok j'ajoute ca ainsi que le problème du integer github.
    attend avant de poster je regarde pour le integer

    EDIT : en regarde vite fait, c'est vrai que c'est étrange parce que c'est le même traitement pour les 2

    poste ton cas dans un seul rapport (comme pour le forum)

  9. #9
    Membre averti

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Points : 364
    Points
    364
    Par défaut
    voila c'est fait ici

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Tu as bien activé la validation et renseigné de quoi forcer du numeric (en annotations par exemple)?

    Si annotations, il faut par exemple renseigner dans la config:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    framework:
        validation:      { enable_annotations: true }
    Il ne devrait pas valider ta reponse si c'est le cas.
    Un petit si la réponse convient. Merci.

  11. #11
    Membre averti

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Points : 364
    Points
    364
    Par défaut
    Oui oui c'est bien activé (d'ailleurs ça l'est par défaut quand tu télécharges le framework) et dans mes entity, mes annotations sont bien du bon type tout comme pour le type des champs de mes formulaires.

Discussions similaires

  1. Naviguer entre les formulaire avec un JTree
    Par moustaf_26 dans le forum Composants
    Réponses: 0
    Dernier message: 14/05/2012, 21h35
  2. [AC-2007] Les formulaires avec Access
    Par eemii dans le forum VBA Access
    Réponses: 3
    Dernier message: 20/11/2010, 08h52
  3. Comment gère t'on les événements avec cocoa ?
    Par robertopowa dans le forum Apple
    Réponses: 1
    Dernier message: 08/05/2010, 13h03
  4. Comment gère-t-on les plans avec Delphi ?
    Par NCGUI dans le forum Débuter
    Réponses: 4
    Dernier message: 11/08/2009, 14h57
  5. Impossible d'entrer des données dans les formulaires avec IE 6
    Par TheSpaceInvader dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 03/08/2009, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo