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 :

Formulaire et sérialisation de champs [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut Formulaire et sérialisation de champs
    Bonjour,

    Je suis confronté à un problème pour la réalisation d'un de mes formulaires.
    Admettons un objet article, que je souhaite hydrater avec ce formulaire. Celui ci possède plein d'attribut dont une catégorie etc.
    Le problème étant que lors du choix d'une catégorie, des "options" supplémentaires à renseigner s'affichent sur la page selon la catégorie.

    Je voulais donc savoir quelle était la meilleure solution pour réaliser ceci. J'avais penser faire avec de l'ajax/js, une fonction qui m'affiche un formulaire supplémentaire lors du changement de catégorie avec tous les champs en plus correspondants et lors de la validation du formulaire Article, ce petit formulaire et ses valeurs est sérialisé dans un attribut de mon objet Article

    Le problème étant que dans mon form builder d'Article, je ne sais pas comment faire pour lui dire que l'attribut "option" doit contenir une sérialsation de formulaire (c'est un champ text).
    De plus, je me demande si cela ne posera pas trop de problème pour la page de modification d'Article, vu qu'il faudra que je charge ce mini formulaire. (mais en principe ca ira)

    Y'a-t-il des solutions plus simple pour réaliser ce que je veux faire ?? Si non, ou indiquer (dans mon form builder ou dans mon controller ?), que mon champ text doit contenir un formulaire (ou tableau) sérialisé ?

    Merci d'avance pour toutes futures suggestions

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonjour,

    Si je comprend bien ton entité Article a un attribut catégory (relation ManyToOne) et un attribut categoryOptions qui est un tableau php sérialisé dans la BDD.

    Si c'est bien le cas comment fera-tu pour effectuer une requete sur des articles ayant tel catégorie et tel option?
    Si j'ai mal compris envoie ton mapping.

    l'attribut "option" doit contenir une sérialisation de formulaire (c'est un champ text).
    Pour cela tu peux regarder du coté des DataTransformer:
    http://symfony.com/doc/current/cookb...nsformers.html
    pour transformer du texte (ou plutôt du json) en tableau php.

    Une autre solution serait d'avoir un getter et un setter pour ces options sous forme sérialisé
    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
     
    /**
    * ex $optionsSerialized='{"quantite":"10","valeur":45}'
    **/
    public function setCategoryOptionsSerialized($optionsSerialized){
     $options=json_decode($optionsSerialized);
     if(!is_array($options)){
      throw new \Exception($optionsSerialized.' ne peut être transformé en tableau php');
     }
     $this->setCategoryOptions($options);
    }
     
    public function getCategoryOptionsSerialized($optionsSerialized){
      return json_encode($this->getCategoryOptions());
    }
    dans ce cas il faut remplacer dans ton formBuilder le champ "categoryOptions" par "categoryOptionsSerialized"

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut
    Bonjour,
    Oui tu as bien compris mon problème
    De plus, je n'aurais pas besoin de faire de requête sur ces options, ce sont juste des champs "bonus" que je dois stocker mais à part être afficher ou modifier dans la fiche article, ils ne servent pas.

    Mon problème est donc lors de l'entrée d'un article, on choisit la catégorie, un petit formulaire s'affiche dynamiquement selon celle-ci et lors de la validation du formulaire article, le petit form des options est transformé en tableau et sérialisé dans le champ correspondant.

    J'ai regardé ton lien attentivement mais je n'ai pas trouvé ce qui pourrait m'intéresser, j'ai du manquer un truc.

    Pour l'instant j'ai juste de l'ajax/JS qui me génère un formulaire classique en html selon la catégorie.
    Et dans mon form builder d'article, j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $builder->add('optionsserialized', 'text')
    Et je ne sais pas comment et ou (controller, form ??) dire à ce champ que lorsque je valide mon article, il doit récupérer les données du form 2 et les enregistrer.

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    lors de la validation du formulaire article, le petit form des options est transformé en tableau et sérialisé dans le champ correspondant
    Et je ne sais pas comment et ou (controller, form ??) dire à ce champ que lorsque je valide mon article, il doit récupérer les données du form 2 et les enregistrer.
    Je comprend pas trop là, ça fonctionne ou pas?
    Si tu sérialises ton sous formulaire et que tu met les données dans un formulaire symfony ça devrait fonctionner non?


    Sinon tu pourrais également tenter en utilisant un type collection http://symfony.com/doc/2.0/reference...ollection.html
    pour l'attribut "options" (et non pas "optionsSerialized" cette fois ci).
    l'avantage étant qu'en modification d'un article, ton formulaire est déjà construit avec ses différentes options éditables.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut
    Ca ne fonctionne pas pour l'instant, le premier message que tu as cité, c'est un résumé de ce que je veux obtenir au final.

    Humm bah je vais essayer avec les deux méthodes que tu me proposes et je verrais bien ce que ca donne

    Je ne sais juste pas ou mettre l'action "récupérer le contenu du formulaire 2 pour le sérialiser et l'enregistrer dans le champ optionsSerialized".

    Si ca doit se faire dans le formulaire avec une action comme dans ton premier post du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $builder->add(
                $builder->create('optionsSerialized', 'text')
                    ->addSerialized($form2)
            );
    mais dans ce cas, comment avoir accès au formulaire 2

    ou si je dois modifier dynamiquement le contenu de ce champ avec du javascript/ajax

    ou encore si je dois le faire dans mon ArticleHandler, juste avant de persister l'objet (mais là toujours pareil, je ne vois pas ou et comment passer le formulaire 2 en paramètre pour le sérialiser

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    à priori c'est simplement du javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $('selecteur_du_form_principal').on('submit',function(){
     
       var optionsAsArray=$('selecteur_du_form_secondaire').serializeArray();//en fait on ne se préocupe pas des données du formulaire 2 coté serveur il n'est pas lui-même soumis
     
       var optionsAsJson=JSON.stringify(optionsAsArray);//NB la fonction JSON.stringify n'est pas dispo sur tout les navigateurs.   
     
       $('selecteur_du_champ_options_serialized').val(datasAsJson);
     
    });
    Néammoins penche toi sur la deuxième solution qui utiliserait le type collection, ce sera certainement plus propre et plus "symfonien"

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

Discussions similaires

  1. Formulaire : conserver contenu des champs
    Par jersey_girl dans le forum Langage
    Réponses: 4
    Dernier message: 26/09/2006, 20h44
  2. Réponses: 7
    Dernier message: 13/07/2006, 14h58
  3. [Formulaire] Récupérer tableau de champs input
    Par dam_moreyllo dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 14/06/2006, 10h49
  4. Ouvrir un formulaire presaisie avec les champs liés
    Par FrédéricCM dans le forum Access
    Réponses: 1
    Dernier message: 02/06/2006, 21h14
  5. Réponses: 4
    Dernier message: 22/05/2006, 15h41

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