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 :

[Form] Valider un champ texte vide [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut [Form] Valider un champ texte vide
    Bonjour,

    Sur un champ text non "required", sans contrainte NotBlank ou autre, la valeur correspondante de mon entité n'est pas écrasée par une chaine vide.

    Doctrine tente de faire un setMonChamp(null) qui n'écrase pas l'ancienne valeur... Si je fais un setMonChamp('') à la main ça marche bien...

    Avez-vous rencontré ce problème ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    Salut,

    C'est etrange oui, mais pourquoi un setTonChamp(null) n'ecrase pas l'ancienne valeur ? A partir du moment ou Doctrine appelle bien cette methode de l'objet, c'est a toi de gerer le cas dans cette methode.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Je n'en sais rien, "mon entité est brut de génération".

    J'ai remarque que le problème se pose pour une entité qui est "proxyfiée" par Doctrine2, pour les autres je peux setter une valeur vide sans problème...
    edit: FAUX, j'en ai qui marche, même proxyfiée...

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Voici le code côté Controller :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
       public function editProfilAction()
       {
          $user = $this->get('security.context')->getToken()->getUser();
          $profile = $user->getCustomerAccount();
     
          $form = $this->get('form.factory')
             ->createBuilder('form', $profile)
             ->add('companyName', 'text', array ('label' => "youraccount.companyName", 'required' => false))
             ->add('contactFullname', 'text', array ('label' => "youraccount.contactName", 'required' => true))
             ->add('phoneNumber', 'text', array ('label' => "youraccount.phoneNumber", 'required' => true))
             ->add('address1', 'text', array ('label' => "youraccount.address1", 'required' => false))
             ->add('address2', 'text', array ('label' => "youraccount.address2", 'required' => false))
             ->add('zip', 'text', array ('label' => "youraccount.zipcode", 'required' => false))
             ->add('city', 'text', array ('label' => "youraccount.city", 'required' => false))
             ->add('state', 'choice', array ('label' => "shipcountry", 'choices' => array ('FR' => 'FR', 'DE' => 'DE', 'UK' => 'UK'), 'required' => true))
             ->getForm();
     
          $request = $this->get('request');
          if ($request->getMethod() == 'POST')
          {
             $form->bindRequest($request);
     
             if ($form->get('contactFullname')->isValid() && $form->get('phoneNumber')->isValid() && $form->get('state')->isValid())
             {
                $em = $this->get('doctrine')->getEntityManager();
                $em->persist($profile);
                $em->flush();
                return $this->redirect($this->generateUrl('_account'));
             }
          }
     
          return $this->render('CompanyAccountBundle:EditAccount:editProfil.html.twig'));

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Je n'y comprends rien, j'ai écrit un test qui ressort une entité de ma base, setCompanyName(null) puis persist et flush... et là ça marche bien...

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    J'explique le code de mon contrôlleur :

    Je récupère le customerAccount lié à ma table user (via la colonne user.customer_account_id). Doctrine m'a mappé une association ManyToOne et donc je récupère le customerAccount en question directement depuis le User connecté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $user = $this->get('security.context')->getToken()->getUser();
    $customerAccount = $user->getCustomerAccount();
    Seulement je ne récupère pas une entité réelle mais une ProxyClass auto-générée par Doctrine2.

    Je pense que certaines classes sont automatiquement "proxyfiée" quand elles sont chargées... mais franchement je ne saurai dire sur quelq critères


    Et donc quand je souhaite sauvegarder les données de mon form, un champ textuel initialement non-vide que je souhaiterais vider n'est pas sauvegardé...

    Mais là où ça devient intéressant, c'est que si j'essaie de modifier un customerAccount autre que celui de mon user courant, les données sont bien mises à jour, même avec une chaîne vide !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          $customerAccount = $em->getRepository('Company\SellerBundle\Entity\CustomerAccount')->findOneBy(array ('customerAccountId' => 8));

    Il semble donc qu'il y ait un rapport avec les proxy...

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

Discussions similaires

  1. Recherche sur champ texte vide impossible
    Par DelphiCool dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/02/2009, 17h42
  2. Tester un champ texte vide avec DLookup
    Par spoker04 dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/09/2008, 13h34
  3. SQL Autoriser champ texte vide
    Par kilimanjaro dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 09/06/2007, 17h41
  4. [VBA-E] Mise en forme d'un champ si VIDE
    Par ickyknox dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/04/2007, 14h28
  5. [CR] mise en forme d'un champs texte en fonction des données
    Par niPrM dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 29/06/2004, 11h57

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