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 de deux arraycollection


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2022
    Messages : 2
    Par défaut Affichage de deux arraycollection
    Bonjour,

    Je récupère les données d'une entité 'Restaurant' qui a une relation OneToMany avec l'entité 'Menu' qui a elle même une relation OneToMany avec l'entité 'Composante'. Je souhaite afficher dans un panel les données du restaurant ainsi que ses menus avec les composants dans un autre panel toujours sur la même page..

    Ici ma fonction d'affichage tiré du controller RestaurantController

    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
     
    #[Route('/restaurant/{slug}', name: 'restaurant.show', methods: ['GET', 'POST'])]
        public function show(Restaurant $restaurant, ComposanteRepository $compRepo, Request $request, EntityManagerInterface $manager, PaginatorInterface $paginator)
        {
     
            // dd($request);
            $form = $this->createForm(RestaurantType::class, $restaurant);
            $form->handleRequest($request);
            if ($form->isSubmitted() && $form->isValid()) {
                $restaurant = $form->getData();
                $manager->persist($restaurant);
                $manager->flush();
     
                $this->addFlash(
                    'success',
                    'Votre établissement a été modifié avec success 🙂'
                );
                return $this->redirectToRoute('restaurant');
            }
     
            $composantes = $compRepo->findAll();
            $composantes = $paginator->paginate(
                $compRepo->findAll(),
                $request->query->getInt('page', 1), /*page number*/
                6 /*limit per page*/
            );
     
            return $this->render(
     
                'restaurant/show.html.twig',
                [
                    'composantes' => $composantes,
                    'restaurant' => $restaurant,
                    'form' => $form->createView()
     
                ]
            );
        }
    Une partie de mon Template show.html.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
    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
     
    <div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">
     
                    <a href="{{path('repas.add', { id: restaurant.id })}}" class="btn btn-primary">
                        ➕ Ajouter un repas
                    </a>
     
                    {% for menu in restaurant.menus %}
     
                        <p class="">{{ menu.name }}</p>
     
                        {% if not composantes.items is same as([]) %}
                            <div class="my-5">
                                <div class="shadow-4 rounded-5 overflow-hidden">
                                    <table class="table align-middle mb-0 bg-white">
                                        <thead class="bg-light">
                                            <tr>
                                                <th>Nom</th>
                                                <th>Adresse</th>
                                                <th>Actions</th>
                                            </tr>
                                        </thead>
                                        <tbody>
                                            {% for composante in menu.composantes %}
                                                <tr>
                                                    <td>
                                                        <div class="d-flex align-items-center">
                                                            <div class="ms-4">
     
                                                                <p class="fw-bold mb-1">{{composante.libelle_comp}}</p>
     
                                                            </div>
                                                        </div>
                                                    </td>
                                                    <td>
                                                        <p class="fw-normal mb-1">{{composante.prix_unitaire}}</p>
                                                    </td>
                                                    <td>
                                                        <p class="fw-normal mb-1">{{composante.poids_unitaire}}</p>                                                             
                                                    </td>
                                                </tr>
                                            {% endfor %}
                                        </tbody>
                                    </table>
                                </div>
                            </div>
                            {# display navigation #}
                            <div class="navigation d-flex justify-content-center mt-2">
                                {{ knp_pagination_render(composantes) }}
                            </div>
                        {% else %}
                            <h4>
                                Il n'y a pas de restaurant enregistré</h4>
                        {% endif %}
                    {% endfor %}
                </div>
    Ce que je veux

    Je veux afficher sur mon panel dans la vue le 'Name' du menu et un tableau avec les composantes qui le compose

    Ce que j'obtiens

    Quand je boucle seulement sur les menus sans les composantes je n'ai pas d'erreur mais des que j'utilise la boucle for sur les composantes j'obtiens cette erreur :

    Neither the property "libelle_comp" nor one of the methods "libelle_comp()", "getlibelle_comp()"/"islibelle_comp()"/"haslibelle_comp()" or "__call()" exist and have public access in class "App\Entity\Composante".

    Je ne sais pas si je suis très clair , n'hésitez pas a me reprendre c'est la première fois que je poste ici.
    Merci d'avance à ceux qui prendront le temps de me répondre.

  2. #2
    Nb
    Nb est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 163
    Par défaut
    Bonjour,
    comme le dit le message, twig ne peut pas accéder à "libelle_comp"; il essaye d'y accéder de plusieurs manières et elles échouent toutes.
    En clair ton entité Composante n'a surement pas de getter normalisé (ie. une methode "getLibelleComp" publique).
    Si tu fais un dump de chaque Composante et que tu as bien ce que tu veux, ton problème est bien le getter qui est absent ou avec une coquille dans la délaration de la methode.

    Dans les plus vieilles versions de symfony (je ne sais pas si c'est encore possible) cela aurait aussi pu venir du fait que tu a spécifié à l'entité de ne pas charger les collection d'objets relatives à des relations (mais je doute fortement que ça soit la cause de ton probleme ).

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2022
    Messages : 2
    Par défaut problème résolu
    Bonjour,

    Problème résolu j'ai finalement enlevé le " _ " dans le fichier twig et maintenant il accède bien au getter. Merci d'avoir pris le temps de me répondre Nb

    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
     
    {% for composante in menu.composantes %}
    											<tr>
    												<td>
    													<div class="d-flex align-items-center">
    														<div class="ms-4">
     
    															<p class="fw-bold mb-1">{{composante.libelleComp}}</p>
     
    														</div>
    													</div>
    												</td>
    												<td>
    													<p class="fw-normal mb-1">{{composante.prixUnitaire}}</p>
    												</td>
    												<td>
    													<p class="fw-normal mb-1">{{composante.poidsUnitaire}}</p>																																																																																																																																																																			
    												</td>
    											</tr>
    										{% endfor %}

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

Discussions similaires

  1. [MySQL] Affichage des deux derniers enregistrements
    Par breizhgen dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/11/2006, 16h23
  2. [VB.NET] Forcer l'affichage de deux décimales pour un nombre double.
    Par annedeblois dans le forum Windows Forms
    Réponses: 9
    Dernier message: 10/11/2006, 14h34
  3. affichage de deux donnée seulement
    Par kitty2006 dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/08/2006, 08h43
  4. Chronometre entre l'affichage de deux printf
    Par finch82 dans le forum C
    Réponses: 3
    Dernier message: 23/06/2006, 09h26
  5. zone de liste : affichage de deux colonnes
    Par niclalex dans le forum IHM
    Réponses: 3
    Dernier message: 27/10/2004, 22h51

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