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: p> détail.html.twig: p>
4 Réponses :
Vous devez le changer en
Cela affiche rien. Quand je teste {{attributs.name}} ou {{attributs.description}} Tout va bien. Mais à l'intérieur de la boucle, rien!
OK. Ce que vous essayez de faire ne peut pas être fait avec un TWIG 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: p> et dans le modèle de brindille: p> prise en compte que cela ne montrera que le public propriétés de votre objet. p> p> pour code> en boucle sur votre objet Attributs. Laissez-moi essayer d'expliquer:
Le TWIG pour code> 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 code> n'est pas un tableau, il s'agit d'un objet que vous avez retrouvé avec votre code> appelé (code> appelé. Donc, la boucle
pour code> 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 code> n'est pas Un tableau, rien n'est accompli.
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 )); }
Utilisation de PropertyAccess Le composant peut être plus approprié.
pour symfony3