6
votes

Symfony2 & Twig: Afficher tous les champs et les clés

J'ai un problème avec Symfony2 et Twig: je ne sais pas comment afficher tous les champs de mon entité chargés de manière dynamique. Voici mon code (affiche rien !!)

contrôleur: xxx

détail.html.twig: xxx


0 commentaires

4 Réponses :


-2
votes

Vous devez le changer en xxx


1 commentaires

Cela affiche rien. Quand je teste {{attributs.name}} ou {{attributs.description}} Tout va bien. Mais à l'intérieur de la boucle, rien!



8
votes

OK. Ce que vous essayez de faire ne peut pas être fait avec un TWIG pour en boucle sur votre objet Attributs. Laissez-moi essayer d'expliquer:
Le TWIG pour LOOP iTère sur un tableau d'objets, exécutant l'intérieur de la boucle pour chacun des objets de la matrice. Dans votre cas, Attributs n'est pas un tableau, il s'agit d'un objet que vous avez retrouvé avec votre appelé (code> appelé. Donc, la boucle pour trouve que ce n'est pas un tableau et ne fonctionne pas l'intérieur de la boucle, pas même une fois, c'est pourquoi vous n'obtenez pas de sortie.
La solution proposée par @thecatontheflat ne fonctionne pas non plus, car il s'agit simplement de la même itération sur une matrice, seulement que vous avez accès aux clés et aux valeurs de la matrice, mais depuis $ attributes n'est pas Un tableau, rien n'est accompli.

Ce que vous devez faire est de passer le modèle un tableau avec les propriétés de l'objet Attributs $. Vous pouvez utiliser la fonction PHP get_Object_vars () pour cela. Faire quelque chose comme: xxx

et dans le modèle de brindille: xxx

prise en compte que cela ne montrera que le public propriétés de votre objet.


0 commentaires

9
votes

Ne vous contentez pas des propriétés publiques! Obtenez le privé / protégé aussi bien!

public function detailAction($id){
    $em = $this->container->get('doctrine')->getEntityManager();

    $node = 'testEntity'
    $Attributes = $em->getRepository('TestBetaBundle:'.$node)->findOneById($id);

    // Must be a (FQCN) Fully Qualified ClassName !!!
    $MetaData = $em->getClassMetadata('Test\Beta\Bundle\Entity\'. $node);
    $fields = array();
    foreach ($MetaData->fieldNames as $value) {
        $fields[$value] = $Attributes->{'get'.ucfirst($value)}();
    }

    return $this->container
                ->get('templating')
                ->renderResponse('TestBetaBundle:test:detail.html.twig', 
                array(
                    'attributes' => $fields
                ));

}


1 commentaires

Utilisation de PropertyAccess Le composant peut être plus approprié.



0
votes

pour symfony3 xxx


0 commentaires