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 :

Affichage dynamique des champs


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 129
    Points : 88
    Points
    88
    Par défaut Affichage dynamique des champs
    Je me tire les cheveux pour un problème de conception,
    Les directeurs de magasins doivent présenter leur chiffres sur un certain laps de temps défini par l'admin

    D'un côté,l'admin avec un formulaire choisit une année de départ et une année de fin.
    Par exemple, année de départ 2015 et année de fin, 2017
    De plus il choisit une périodicité soit trimestrielle,semestrielle ou mensuelle.

    De son coté, le user saisira directement les valeurs qui correspondent à des totaux, soit selon la périodicité choisie, une icone sera présente sous chaque paire d'année qui ouvrira une modale pour saisir des valeurs.
    SI la périodicité est semestrielle, on aura donc semestre 1 et semestre 2 pour l'écharpe blanche. A la validation, une addition devra être faite et le total sera affiché sur le tableau prinicipal
    Pour bien comprendre : le lien pour voir à quoi ressemble le tableau
    https://jsfiddle.net/x99pnc4h/5/
    Le problème c'est que je ne sais pas comment faire en sorte d'afficher les champs pour chaque vêtements directement sans data prototype.,

    Je cherche à avoir les champs affichés directement sans passer par le data prototype. Que les champs s'affichent en fonction du nombre de colonne

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    ça donne mal à la tête pour comprendre.
    si on choisit mensuelle, on clique dans une case un modal s'affiche et on peut saisir tous les mois de l'année 2014 à 2015 donc les 24 mois d'affilés ?

    ensuite faut enregistrer tout ça en base ? (pour une utilisation ultérieure ?)
    et donc ça veut dire qu'il faut aussi enregistrer en base la saisit trimestrielle et semestrielle également pour la même période ?

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 129
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par dukoid Voir le message
    ça donne mal à la tête pour comprendre.
    si on choisit mensuelle, on clique dans une case un modal s'affiche et on peut saisir tous les mois de l'année 2014 à 2015 donc les 24 mois d'affilés ?

    ensuite faut enregistrer tout ça en base ? (pour une utilisation ultérieure ?)
    et donc ça veut dire qu'il faut aussi enregistrer en base la saisit trimestrielle et semestrielle également pour la même période ?
    Je vais simplifier mon explication.
    L'admin a choisi de 2014 à 2017 avec une périodicité semestrielle.
    On aura quatres colonnes et un certain nombre de lignes selon le magasin.
    2014/2015, 2015/2016, 2016/2017 : ventes réalisées, 2016/2017 : ventes prévues.
    Car à partir de 2016,deux colonnes s'affichent avec ventes réalisées et ventes prévues car c'est l'année courante.
    Imaginons qu' on ait trois lignes, douze champs doivent s'afficher.
    Pour chaque colonne,il y a une icône qui ouvre une modale.
    Exemple pour l'année 2014,soit je saisit la valeur directement dans le champs correspondant à un total.
    Soit j'ouvre la modale et il aura deux colonnes semestre 1 et semestre 2 juste pour l'année 2014.
    Pour un produit,hé mets 10 pour le semestre 1 et 10 pour le semestre 2,je valide alors la valeur 20 s'affichera dans le champ du produit pour l'année 2014

  4. #4
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    voici grossièrement ce que je ferais :

    * creer un formtype qui represente une ligne : ligneFormType
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
      public function buildForm(FormBuilderInterface $builder, array $options)
        {
            for ($annee=$annee1; $annee<=$annee2; $annee++)                      // annee1=2016    annee2=2017   provenant du filtre
                $builder->add('total_'.$annee,  'number', ['empty_data' => 0])        // il est possible de passer des paramètres dans un formTYpe
    ...

    * après, je ne sais pas comment tu récupères les produits: "echarpes bleu", "echarpe blanc"...
    donc faire un formType : tableauFormType
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
      public function buildForm(FormBuilderInterface $builder, array $options)
        {
            for ($nb=0; $nb<=count($produits); $nb++)                      // produits ( "echarpes bleu", "echarpe blanc")
                $builder->add('ligne_' . $nb,   class::formType, 'ligneFormType');
    ...
    * en faisant un dump de $tableauFormType->createView() tu va voir la structure en global du formulaire
    * dans twig, pour l'affichage. utiliser cette technique pour personnaliser l'affichage du formulaire. (les variables de l'exemple n'ont aucun rapport avec ton sujet)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    {% for key,value in form.user %}                           {# key is the ID in the database table #}
        {{ form_widget(value, {'label':value.vars.label}) }}
        {{ form.user.vars.choices[key].data.moneyLeft }}            {# this syntax is new #}
    {% endfor %}
    * remarque :
    chaque champ représente un total.
    pour saisir les valeurs en mensuel, semestriel etc... tu fais ça avec jQuery + modal
    à chaque changement du filtre (année etc..) il faut reconstruire les formType

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 129
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par dukoid Voir le message
    voici grossièrement ce que je ferais :

    * creer un formtype qui represente une ligne : ligneFormType
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
      public function buildForm(FormBuilderInterface $builder, array $options)
        {
            for ($annee=$annee1; $annee<=$annee2; $annee++)                      // annee1=2016    annee2=2017   provenant du filtre
                $builder->add('total_'.$annee,  'number', ['empty_data' => 0])
    ...

    * après, je ne sais pas comment tu récupères les produits: "echarpes bleu", "echarpe blanc"...
    donc faire un formType : tableauFormType
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
      public function buildForm(FormBuilderInterface $builder, array $options)
        {
            for ($nb=0; $nb<=count($produits); $nb++)                      // produits ( "echarpes bleu", "echarpe blanc")
                $builder->add('ligne_' . $ns,   class::formType, 'ligneFormType');
    ...
    * en faisant un dump de $tableauFormType->createView() tu va voir la structure en global du formulaire
    * dans twig, pour l'affichage. utiliser cette technique pour personnaliser l'affichage du formulaire. (les variables de l'exemple n'ont aucun rapport avec ton sujet)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    {% for key,value in form.user %}                           {# key is the ID in the database table #}
        {{ form_widget(value, {'label':value.vars.label}) }}
        {{ form.user.vars.choices[key].data.moneyLeft }}            {# this syntax is new #}
    {% endfor %}
    * remarque :
    chaque champ représente un total.
    pour saisir les valeurs en mensuel, semestriel etc... tu fais ça avec jQuery + modal
    à chaque changement du filtre (année etc..) il faut reconstruire les formType

    Merci de t'être penché sur mon problème.
    Je vais essayer de mettre ça en place.

    Merci

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 129
    Points : 88
    Points
    88
    Par défaut Affichage seulement d'un seul champ
    Mon souci se pose dans le fichier twig où je n'arrive pas à afficher les champs pour mes produits

    Twig :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    {% for product in products %}
                            <tr>
                                <td >
                                    {{ product }}
     
                                </td>
                              {% for key,value in form.total %}   
                               <td>        
                                 {{  form_widget(value, {'label':value.vars.label}) }}
                              </td>           
                              {% endfor %}
                            </tr>
                        {% endfor %}
    Dans mon formtype, j'ai fait ceci

    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
     
    public function buildForm(FormBuilderInterface $builder, array $options)
        {
     
            for ($i = 0; $i <= $options['nbColumns']; $i++) {
                $builder->add('total', NumberType::class);
            }
     
        }
     
        /**
         * {@inheritdoc}
         */
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Store\ProductBundle\Entity\FormTotal',
                'nbColumns' => []
            ));
     
        }
    Puis dans le controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /...../
    $total = new FormTotal();
     $options = ['nbColumns' => $nbFields];
     $form = $this->createForm(FormTotalType::class, $total, $options);
    Si je fais un dump de $nbFields, le chiffre 13 apparait dans le profiler!

  7. #7
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    1) dans le twig, il ne faut pas itérer sur products mais sur le form

    2) ça donne quoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
     $form = $this->createForm(FormTotalType::class, $total, $options);
    dump($form);  exit; 
    faut vérifier si la structure de $form contient bien le nombre de champs voulu... et de plus, cela va te permettre de te donner une indication sur le chemin à itérer dans twig.

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 129
    Points : 88
    Points
    88
    Par défaut Dump du form
    Nom : dump_form_total.png
Affichages : 1054
Taille : 80,2 Ko

    Pour ce qui est des produits, je les récupère dans la base. L'admin, en amont, a choisi les produits sur lesquels le magasin devra renseigner des valeurs.
    Pour chaque produits, j'affiche les champs total.
    Pour ce qui est du dump du form, je ne vois pas plusieurs champs!

  9. #9
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    ou dans la vue Twig, tu va dans le profiler Symfony.
    tu peux voir là aussi comment est constitué le form.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    {{ form_start(form) }}
    {{ form_widget(form) }}
    {{ form_end(form) }}
    avec ça, cela doit t'afficher ton formulaire au complet.

    si tu n'as pas ça alors tu as mal défini ton formulaire dans le controller.

    ...........................................................................................................................
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public function buildForm(FormBuilderInterface $builder, array $options)
        {
     
            for ($i = 0; $i <= $options['nbColumns']; $i++) {
                $builder->add('total', NumberType::class);
            }
     
        }
    tu donne toujours le même nom : 'total' pour chaque champ, donc il le re écrase à chaque fois. regarde l'exemple que j'ai fais c'est pas pour rien si j'ai mis des indices supplémentaires

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 129
    Points : 88
    Points
    88
    Par défaut
    le code que tu as mis m'affiche un seul champs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    {{ form_start(form) }}
    {{ form_widget(form) }}
    {{ form_end(form) }}
    Dans le form type, quand j'inclue les champs dans un tableau tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for ($i = 0; $i <= $options['nbColumns']; $i++) {
                $tab[]= $builder->add('total', NumberType::class);
            }
    dump($tab)
    Il me sort bien les 14 champs comme tu peux le voir
    Nom : dump_$tab.png
Affichages : 1082
Taille : 7,6 Ko
    Donc quand je dump le formulaire, il devrait y avoir normalement dans le FromBuilder, 14 éléments

  11. #11
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    c'est normal, dans un arrau tab[] = ..... ; tu peux y mettre à la suite ce que tu veux

    MAIS

    $builder->add // NON, il y a des controles, tu peux pas mettre ce que tu veux !!! ça verifi ce que tu veux ajouter et le bloque si ça lui convient pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
     $builder->add('total' . $i, NumberType::class);
    ...

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 129
    Points : 88
    Points
    88
    Par défaut
    Si je rajoute $i, j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Neither the property "total0" nor one of the methods "getTotal0()", "total0()", "isTotal0()", "hasTotal0()", "__get()"
    C'est l'attribut total qui est défini dans l'entity

  13. #13
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    il y a des malentendus, il y a des choses que je ne peux pas deviner si tu ne l'évoques pas.

    ou se trouve la propriété total, dans quelle entité ?
    c'est quoi la relation en base entre les produits et les années ? pour un produit, le total de l'année 2016 ? le total de l'année 2017 ?


    parceque je suis partis du principe de créer un formulaire basé sur aucune entité.
    une fois saisis tous les totaux des champs, le controller reçoit ces champs et c'est à partir de là que tu gères ces valeurs en les incluant ou tu veux..... (dans des entités, des stats.....)

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 129
    Points : 88
    Points
    88
    Par défaut
    La propriété total est dans cette entité :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     
    <?php
     
    /***/
    class FormTotal
    {
        /**
         * @var int
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @var int
         *
         * @ORM\Column(name="total", type="integer", nullable=true)
         */
        private $total;
     
     
        /**
         * Get id
         *
         * @return int
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set total
         *
         * @param integer $total
         *
         * @return FormTotal
         */
        public function setTotal($total)
        {
            $this->total = $total;
     
            return $this;
        }
     
        /**
         * Get total
         *
         * @return int
         */
        public function getTotal()
        {
            return $this->total;
        }
    }
    Le formType :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
     
    <?php
     
    /***/
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\Extension\Core\Type\NumberType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolver;
     
    class FormTotalType extends AbstractType
    {
        /**
         * {@inheritdoc}
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
     
            for ($i = 0; $i <= $options['nbColumns']; $i++) {
                $builder->add('total', NumberType::class);
            }
     
        }
     
        /**
         * {@inheritdoc}
         */
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Store\ProductBundle\Entity\FormTotal',
                'nbColumns' => []
            ));
     
        }
     
        /**
         * {@inheritdoc}
         */
        public function getBlockPrefix()
        {
            return 'store_productbundle_formtotal';
        }
     
     
    }
    Il n'y a pas de relation entre les produits et les années.
    L'admin paramètre les années et la périodicité et ça se base sur cette entité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    /***/
    class StoreConfiguration
    {
    protected $startDate;
    protected $endDate;
    protected $periodicity;
    * @ORM\OneToOne(targetEntity="bundle store"...)
    protected $store;
    }
    Cette configuration est donc lié à un seul magasin. Pour ce qui est des produits, c'est une autre entité qu'on lie au à un seul magasin également. L'admin choisit les produits sur lesquels il souhaite avaoir les chiffre des ventes.
    Je souhaite dans un premier temps pouvoir afficher les champs puis dans un deuxième temps, enregistrer les totaux saisis en base.

  15. #15
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    ne nomme surtout pas une entité TotalForm c'est trompeur.
    TotalProduit ou je ne sais pas quoi ton entité n'est en aucun cas un form

    alors pour simplifier le tout , ne base pas ton formulaire sur une entité.

    voilà mon raisonnement :

    tu as une liste de probuit avec nbProduits
    le filtre permet de choisir l'annee1 et annee2

    quand le client valide les filtres, le controlleur construit n champs number.

    nbChamp = (annee2 - annee1 + 1) * nbProduit; (si tu as : 2014,2016 et 4 produits = 12 champs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            ...
           for ($i = 0; $i <= $options['nbChamp ']; $i++) {
                $builder->add('total_' . $i, NumberType::class);
            }
    à la validation de ce formulaire, tu récupères les champs qui sont numérotés de total_0 à total_11 et tu gères les données retour comme tu veux pour les enregistrer en base etc....

  16. #16
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 129
    Points : 88
    Points
    88
    Par défaut
    Au lieu de me baser sur une entité, j'ai fait un model comme ceci :

    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
     
     
    <?php
     
     
    namespace Store\ProductBundle\Model;
     
    class TotalSales {
     
        private $total;
     
     
        /**
         * @return mixed
         */
        public function getTotal()
        {
            return $this->total;
        }
     
        /**
         * @param mixed $data
         */
        public function setTotal($total)
        {
            $this->total = $total;
        }
     
    }
    Puis le formType qui reste le meme sauf la data_class

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
    <?php
     
    namespace Store\ProductBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\Extension\Core\Type\NumberType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolver;
     
    class TotalSalesType extends AbstractType
    {
        /**
         * {@inheritdoc}
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
     
            for ($i = 0; $i <= $options['nbColumns']; $i++) {
                $builder->add('total', NumberType::class);
            }
     
        }
     
        /**
         * {@inheritdoc}
         */
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Store\ProductBundle\Model\TotalSales',
                'nbColumns' => []
            ));
     
        }
     
        /**
         * {@inheritdoc}
         */
        public function getBlockPrefix()
        {
            return 'store_productbundle_totalsales';
        }
     
     
    }
    Après dans le controller je récupère l'année de départ et l'année de fin déjà en base pour fixer le nombre de champs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $options = ['nbColumns' => $nbFields];
     $form = $this->createForm(TotalSales::class, new TotalSales, $options);
    Si je mets la variable $i dans le formtype, j'ai toujours l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Neither the property "total_0" nor one of the methods "getTotal0()", "total0()", "isTotal0()", "hasTotal0()"

  17. #17
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    commence à 1 au lieu de 0, peut être.

    une entité, c'est un model

    comme je l'ai expliqué tu as une entité, UNE d'un coté et de l'autres plusieurs champs TOTAL.
    alors pour faire le lien, il faut une ArrayCollection d'entité(donc plusieurs) et de l'autres plusieurs champs TOTAL.

    de plus, une entité represente une table en base donc ça veut dire que tu va avoir une table total en base ? je ne crois pas..

    vu ton niveau de faible connaissance de base de Symfony, ça va être plus compliqué mais c'est toi qui voit.

  18. #18
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 129
    Points : 88
    Points
    88
    Par défaut
    Pour faciliter l'affichage des champs,ds le twig, je boucle sur une balise input pour chaque produits.
    J'ai bien mes inputs qui correspondent au nombre de colonnes.
    Chaque input à un id différent,normal.
    De ce que tu me dit, je dois enregistrer ces totaux dans une entité avec arraycollection qui va stocker plusieurs données.
    Quelle est la manière de procéder pour enregistrer dans l'entité au niveau du contrôleur ?

  19. #19
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    laisse tomber l'ArrayCollection et les entités, dans ton cas cela n'a aucun intérêt.
    comme je l'ai dis, une entité représente une table en base ET ce n'est pas ton cas DONC tu dois faire SANS.

    le controlleur reçoit le formulaire(qui n'est pas lié à des entités) tu récupères les données du formulaire et c'est là que tu les gères dans tes objets/entités....

  20. #20
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 129
    Points : 88
    Points
    88
    Par défaut
    ok, ça me semble plus jouable!

Discussions similaires

  1. recuperation et remplissage dynamique des champs de textes
    Par gloglo dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 24/04/2007, 18h55
  2. Inserer dynamiquement des champs input avec attribut
    Par titou250 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/01/2007, 09h44
  3. affichage defectueux des champs
    Par @rkane dans le forum Access
    Réponses: 6
    Dernier message: 13/09/2006, 17h43
  4. [JScrollPane] Affichage dynamique des barres de scroll
    Par Atharendil dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 14/01/2006, 21h07
  5. Parcours dynamique des champs
    Par cosmos38240 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/11/2005, 14h54

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