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 :

2 à n formulaires sur le meme template mais pas le meme rendu


Sujet :

Symfony PHP

  1. #1
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut 2 à n formulaires sur le meme template mais pas le meme rendu
    Bonjour,
    J'ai un problème qui me laisse perplexe:
    Pour une boutique en ligne, dans un controller, je récupère toutes mes entités Packages d'une Catégorie (entité) que je demande ensuite à twig de m'afficher.
    Pour chaque package je veux afficher un petit formulaire de commande (quantité + bouton submit).

    voici le code:
    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
    59
    60
    61
    62
     
          //  packages & produits / categories
          foreach ($categories as $k_categorie => $categorie) {
     
              $produits = array();
     
              if ($categorie->getIdcategorie() == $id_categorie) {
     
                  //  recuperer les packages de la categorie
                  $packageRepository = $this->getDoctrine()->getManager()->getRepository('CoreBundle:Packages');
                  $packages = $packageRepository->findPackagesInternetByCategorie($categorie);
     
                  //  recuperer les tarifs / package
                  $PackagesProduitRepository = $this->getDoctrine()->getManager()->getRepository('CoreBundle:PackagesProduit');
                  $tmp= array();
     
                    foreach ($packages as $k => $package) {
     
                        $tmp[]=$PackagesProduitRepository->getPrixPackage($package->getIdpackages(),1);
     
                        // Création du formulaire
                        $form = $this->get('form.factory')->create(PackagesForm::class);
                        $package->setForm($form->createView());
     
                        $package->setQuotaProduitPackage($tmp);
                    }
     
                  $categorie->setPackages($packages);
                  //dump($categorie);
                  //die;
     
     
                  //  recuperer les produits de la categorie
                  $produitRepository = $this->getDoctrine()->getManager()->getRepository('CoreBundle:Produit');
                  $produits = $produitRepository->findProduitsInternetByCategorie($categorie);
     
                  //  recuperer les tarifs / produit
                  $tarifRepository = $this->getDoctrine()->getManager()->getRepository('CoreBundle:Tarif');
     
                  foreach ($produits as $k => $produit) {
     
                      $tarifs = $tarifRepository->findTarifsProduitInternetByProduit($produit);
     
                      //-------------------------------------------------------------- 
                      // Clear manager
                      //  Nécessaire pour nettoyer le cache et récupérer les bons tarifs
                      $this->getDoctrine()->getManager()->clear();
                      //--------------------------------------------------------------
     
                      $produit->setTarifs($tarifs);
     
                        // Création du formulaire
                        $form = $this->get('form.factory')->create(ProduitForm::class);
                        $produit->setForm($form->createView());
                  }
     
                  $categorie->setProduits($produits);
     
                  $current_categorie = $categorie;
              }
     
          }
    et la vue (ou le formulaire devrait être defini):
    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
    {% for package in current_categorie.packages %}
     
                <div class="row produit">
                    <div class="col-lg-3 col-md-3 col-sm-3 col-xs-3 photo">
                        {% if package.image is not null %}
                            <img src="data:image/jpg;base64,{{ package.renderimage }}" width="140" height="140" title="{{ package.designationinternet }}"/>
                        {% else %}
                            <img src="{{ asset('bundles/dagcore/images/null.jpg') }}" width="140" height="140" title="Aucune image"/>
                        {% endif %}
                    </div>
                    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6 description">
                        <div class="row">
                            <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 designation">{{ package.designationinternet }}</div>
                        </div>
                        <div class="row">
                            <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 observations">{{ package.description|raw }}</div>
                        </div>
                    </div>
                    <div class="col-lg-3 col-md-3 col-sm-3 col-xs-3 achat">
                        <div class="row">
                            <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 tarifs">
                                blablable<br/>
                                blablable<br/>
                                blablable<br/>
                                blablable<br/>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 action">
                                {% if package.saisieinfoaddobligatoire == 0 %}
                                    {# 
                                    NE FONCTIONNE PAS ! TROP LENT !
                                    {{ render(controller("DAGCoreBundle:Packages:formulaire", {'package': package})) }}
                                    #}
     
                                    {{ form_start(package.form, {'method': 'POST', 
                                            'attr': {'class': 'nobottommargin form-achat' }, 
                                            'id': 'achat-form-'~package.idpackages, 
                                            'name': 'achat-form-'~package.idpackages, 
                                            'action': path('dag_achat_packages', {'idPackage': package.idpackages}) }) }}
                                        {% for quota,info in package.quotaProduitPackage %}
                                            {% if package.quotaProduitPackage|length == 1 %}
                                                {{ form_widget(package.form.quantite, {'full_name': 'achat-form[quantite_'~info.idQuota~']', 'id': 'achat-form-quantite['~info.idQuota~']'}) }}
                                            {% endif %}
                                        {% endfor %}
                                        {{ form_widget(package.form.ajouter, {'attr': {'class': 'btn-default btn'}}) }} 
                                    {{ form_end(package.form) }}
     
                                {% else %}
                                    <div class="">Détails</div>
                                {% endif %}
                            </div>
                        </div>
                    </div>
                </div>
            {% endfor %}
    La catégorie contient 2 packages et dans le rendu, le premier formulaire s'affiche bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form name="achat-form-11" method="post" action="/app_dev.php/service/achat-packages/11" class="nobottommargin form-achat">
                                                                                                                            <input id="achat-form-quantite[51]" name="achat-form[quantite_51]" required="required" min="1" max="100000" class="form-control" type="number">
                                                                                                                    <button type="submit" id="packages_form_ajouter" name="packages_form[ajouter]" class="btn-default btn btn">Ajouter</button> 
                                    <input id="packages_form__token" name="packages_form[_token]" value="I0nP1Df2rwz5-x6-W12QSG3GDjhytDuY97-ui9n4_4Q" type="hidden"></form>
    mais le second :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form name="achat-form-41" method="post" action="/app_dev.php/service/achat-packages/41" class="nobottommargin form-achat">
                                                                                                                                                                                                                                    <button type="submit" id="packages_form_ajouter" name="packages_form[ajouter]" class="btn-default btn btn">Ajouter</button> 
                                    <div class="form-group"><label class="control-label required" for="packages_form_quantite">Quantité :</label>&nbsp;<span style="font-size: 1.2em;color: red">*</span><input id="packages_form_quantite" name="packages_form[quantite]" required="required" min="1" max="100000" class="form-control" type="number"></div><input id="packages_form__token" name="packages_form[_token]" value="I0nP1Df2rwz5-x6-W12QSG3GDjhytDuY97-ui9n4_4Q" type="hidden"></form>
    les attributs de la balise form sont bons mais pas les balises qu'elle contient?!

    Y a t'il un clear à faire sur le FormVIew, formWidget...?
    Comment faire pour avoir le meme affichage du formulaire; avec les definitions données?
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  2. #2
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Je reviens avec la réponse.

    Twig n'y est pour rien, symfony non plus, le ...... devant l'écran est responsable.

    En fait, j'initialisais au mauvais endroit mon tableau tmp[]. >> pb résolu
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/08/2010, 11h20
  2. Réponses: 1
    Dernier message: 28/01/2009, 14h33
  3. Réponses: 11
    Dernier message: 19/11/2007, 20h17
  4. droit sur un dossier: écriture mais pas lecture
    Par boss_gama dans le forum Windows Serveur
    Réponses: 11
    Dernier message: 11/09/2007, 12h26
  5. Réponses: 2
    Dernier message: 04/02/2007, 16h16

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