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 :

Symfony2 Formulaire NULL et VIDE


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Symfony2 Formulaire NULL et VIDE
    Bonjour à tous,
    j'ai un problème avec les formulaires de symfony2.

    J'ai une entité Adresse qui contient un champ "ligne2" de type string qui ne peut pas être NULL dans la base. Cependant, ce champ n'est pas obligatoire et donc l'utilisateur peut très bien le laisser vide.
    J'ai donc mis un @Assert\NotNull(); sur mon champ mais lorsque l'utilisateur soumet le formulaire, symfony met le champs à NULL et non pas a vide et du coup impossible de valider.

    Comment palier à ce problème?

    Merci.

  2. #2
    Membre habitué
    Ingénieur d'études et de développement
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur d'études et de développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Points : 154
    Points
    154
    Par défaut
    Bonjour,

    Pourquoi ton champ ne peut pas être nul dans la base si il n'est pas obligatoire dans ton formulaire ?
    Il y a une incohérence.

    Si vraiment tu veux que le champs envoie '' et non null tu peux définir une valeur par défaut dans ton entité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        /**
         * @ORM\Column(name="ligne2", type="text", nullable=false)
         */
    $ligne2 = '';

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Je suis d'accord avec toi mais ce serait long a expliquer... (histoire de concaténation et d'autres choses)

    C'est ce que j'ai essayé de faire mais symfony mets NULL quand même

    Pas d'autres solutions?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    Tu affiches quand même le champ adresse2 dans ton formulaire?

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2013
    Messages : 33
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    tu peux facilement contourner le problème. Pour cela, il faut enlever le AssertNotNull. Si une valeur nulle est autorisée dans le formulaire, alors null est autorisé pour la validation de l'entité. Cependant, si null n'est pas autorisé dans la base, alors il suffit de détecter si l'utilisateur a entré une valeur ou non. Après la validation mais avant d'insérer l'entité dans la base, on détecte si ce champ est null. Si oui, alors on l'affecte à "" (ou " ") avant de flush.

    Cependant, je pense quand même que ça reste une incohérence de conception. M'enfin si c'est long à expliquer, tu peux toujours faire ce que j'ai dit.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    dans le setter tu vérifies si la valeur est null alors tu lui attribue une valeur vide ' '
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private $ligne;
     
    /**
       * Set ligne
       *
       * @param string $ligne
       */
      public function setLigne($ligne=null) {
        $this->ligne = empty($ligne) ? '':$ligne
      }

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    La solution qui me semble la plus propre pour rattraper ton problème de code crado est d'utiliser les groupes de validations.
    Tu pourras ainsi valider des formulaires liés a ton entité doctrine de manière différente

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/06/2012, 12h18
  2. Syntaxe SQL retirer Null et vide
    Par WebPac dans le forum Oracle
    Réponses: 5
    Dernier message: 29/09/2006, 10h34
  3. [ODBC] Valider formulaire avec champs vides
    Par dorot dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 12/07/2006, 17h15
  4. Réponses: 4
    Dernier message: 12/09/2005, 09h21
  5. Réponses: 11
    Dernier message: 09/12/2004, 15h03

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