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 :

Validation.yml : Problème avec le type "integer" [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Par défaut Validation.yml : Problème avec le type "integer"
    Bonjour chers camarades Symfoniens, je viens quérir (une fois de plus) votre aide.

    J'ai créé tout un tas de formulaires pour une interface d'administration (classique : ajout, modification, suppression de contenu) et maintenant j'en suis à m'assurer que les utilisateurs ne rentrent pas n'importe quoi en base de données.
    Pour cela j'ai donc suivi la documentation officielle qui parle de validation de formulaire.

    J'ai pu mettre en place diverses contraintes comme par exemple, ne pas laisser tel ou tel champ vide, ou encore vérifier si une date de fin est bien supérieure à une date de début... Mais là je me retrouve embêté avec une contrainte pourtant basique.
    Je souhaite vérifier que mon champ contient un int et rien d'autre. Encore une fois j'ai donc suivi la documentation officielle, mais ça ne fonctionne pas.

    Dans mon fichier "validation.yml" j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    AppBundle\Entity\AbstractDurationEntity:
        properties:
            minDuration:
                - Type:
                    type: integer
                    message: La valeur {{ value }} n'est pas un type {{ type }} valide
    Et lorsque je valide mon formulaire, quelle que soit la valeur entrée, il ne valide pas et affiche le message d'erreur.

    Quand je met "toto" dans la case minDuration et qu'il m'affiche :
    La valeur "toto" n'est pas un type integer valide
    Là je suis entièrement d'accord et plutôt satisfait.

    Mais quand je rentre "4" dans cette même case et qu'il m'affiche :
    La valeur "4" n'est pas un type integer valide
    Là j'ai plutôt tendance à penser qu'il se fout de moi


    Quelqu'un a-t-il déjà connu ce problème, et encore mieux, quelqu'un a-t-il déjà eu ce problème et trouvé la solution ?

    Merci de votre attention.

  2. #2
    Membre très actif
    Homme Profil pro
    Déveleoppeur Web/Mobile
    Inscrit en
    Avril 2013
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déveleoppeur Web/Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 330
    Par défaut
    on dirait qu'il n'a pas réussi à convertir la valeur en entier, comment génère tu ton formulaire ? Avec un formtype ?

  3. #3
    Membre confirmé Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Par défaut
    Oui,

    Voici le formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function buildForm(FormBuilderInterface $builder, array $options)
    	{
    ...
    $builder->add('MinDuration','text', array(
    				'label' => 'Durée minimum',
    				'read_only' => $readOnly
    				));
     
    ...
    Mon controler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $form = $this->createForm(new AlertType('add', $mode), $alert);
    		$form->handleRequest($request);
     
    		if ($form->isValid()) {
    ...
    Dis moi si tu as besoin de voir plus de code (J'essaye de ne pas surcharger la page inutilement ).

  4. #4
    Membre très actif
    Homme Profil pro
    Déveleoppeur Web/Mobile
    Inscrit en
    Avril 2013
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déveleoppeur Web/Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 330
    Par défaut
    d'accord, oui peux tu montrer la suite après le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($form->isValid()) {
    pour voir le traitement du formulaire, en particulier quand tu récupères le minDuration et que tu crées l'entité. Car c'est la que ça pose problème.

    Vu que c'est un champs de type integer je te conseillerais de mettre le type en integer ici même si ce n'est pas sur que cela règle ton problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $builder->add('MinDuration','integer', array(
    				'label' => 'Durée minimum',
    				'read_only' => $readOnly
    				));

  5. #5
    Membre confirmé Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    if ($form->isValid()) {
    			if ($mode == 'simple')
    				$alert->setTemplate('Alerts/metaAlert.html.twig');
    			else if ($mode == 'advanced') {
    				$template = 'Alerts/'.time().$form->get('Template')->getData();
    				if (!strstr($form->get('Template')->getData(), '.html.twig'))
    					$template = $template.'.html.twig';
     
    				$file = fopen('../src/AppBundle/Resources/views/'.$template, 'w');
    				fwrite($file, $form->get('Content')->getData());
    				fclose($file);
    				$alert->setTemplate($template);
    				$alert->setContent(null);
    			}
    			$em->persist($alert);
    			$em->flush();
    			return $this->redirect($this->generateUrl('add_alert', array(
    					'succes' => true,
    					'mode' => $mode,
    			)));
    		}


    J'ai testé en mettant le type "integer" dans mon champ, ça ne valide pas le formulaire si ce n'est pas un int dans la case, mais par contre mon message d'erreur ne s'affiche plus du tout, du coup ça ne m'arrange pas trop, car l'erreur bien que bloquante pour l'utilisateur n'est pas visible directement.
    En plus, même si je laisse en "text", je devrais quand même pouvoir faire un test sur ma valeur non ?

  6. #6
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    En mettant le type à 'text', même si tu tapes 4, il sera traité comme '4', donc comme une chaine de caractères.
    Résultat : comme ton validateur vérifie qu'il a un entier et rien d'autre il te balance une violation de contrainte.

    Vérifie dans la debug toolbar (section Form) que l'erreur est bien celle là, il est possible qu'il y ait une autre erreur et qu'elle ne soit pas rendue dans ta template.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec le type timestamp
    Par aline dans le forum Oracle
    Réponses: 6
    Dernier message: 21/02/2005, 10h05
  2. [Débutant][Phppgadmin] problème avec les types
    Par PoY dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 19/08/2004, 17h06
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48

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