Bonjour
Je ne comprends pourquoi l'erreur est que la variable "tags" n'existe pas, pourtant je l'ai bien défini dans le controller comme ceci :
public function tagsliste(TagRepository $tagRepository): Response {
return $this->render('post/_all_tags.html.twig', ['tags' => $tagRepository->findAll()]);
}
post/_all_tags.html.twig :
<div class="tags-list">
{% for tag in tags %}
<a href="#">{{ tag.name }}</a>
{% endfor %}
</div><!-- .tags-list -->
Je vous remercie de votre aide !
Bonjour Anouchka,
Tout d'abord, quel est l'intérêt de passer un repo en param de ton controller?
public function tagsliste(): Response {
$tags = $this->getDoctrine()->getManager()->getRepository('App/Tags')->findAll();
return $this->render('post/_all_tags.html.twig', ['tags' => $tags]);
}
Ca me paraît + simple...
Mais bon ca ne résoud pas le pb. A priori, je dirais que tes tags sont vides, donc aucun passage dans la boucle for de ton twig ?
Essaye un dump($tags) dans ton controller pour vérifier...
Quand je met ceci, j'ai bien la liste des tags:
public function index(TagRepository $tagRepository): Response
{
return $this->render('post/index.html.twig', [
'tags' => $tagRepository->findAll()]);
}
post/index.html.twig :
{% extends 'base.html.twig' %}
{% block title %}Hello{% endblock %}
{% block body %}
<div class="tags-list">
{% for tag in tags %}
<a href="#">{{ tag.name }}</a>
{% endfor %}
</div><!-- .tags-list -->
{% endblock %}
L'appel d'un template avec rendu de données se fait au travers de la fonction render(controller()). C'est donc normal qu'il n'y ait aucune données...
Voir https://symfony.com/doc/current/templating/embedding_controllers.html tu devrais trouver un exemple qui illustre tout ça :)
Merci pour le lien.
J'ai fait ceci :
Dans App\Controller\BlogController.php
public function tagAction(TagRepository $tagRepository): Response
{
return $this->render('post/_all_tags.html.twig', ['tags' => $tagRepository->findAll()]);
}
post/_all_tags.html.twig :
{% for tag in tags %}
<a href="#">
{{ tag.name }}
</a>
{% endfor %}
post/sidebar.html.twig :
<div class="tags-list">
{{ render(controller('App\\Controller\\BlogController::tagAction')) }}
</div><!-- .tags-list -->
Mais j'obtiens cette erreur :
An exception has been thrown during the rendering of a template ("Controller "App\Controller\BlogController" does neither exist as service nor as class").
Dans post/sidebar.html.twig :
{{ render(controller('App\\Controller\\BlogController::tagAction')) }}
à remplacer par :
{{ render(controller('App:Controller:BlogController::tag', {'tagRepository ': 'valeur de ton TagRepository'})) }}
Il faut enlever le "action" à la fin du nom de ton controleur (c'est une convention). Mais tu vas avoir une autre erreur.
En effet, quelle valeur affecter à tagRepository, puisque tu ne l'as pas dans ton template twig ?...
Perso je reverrais mon controleur comme je te l'ai indiqué un peu plus haut (sans le repo en paramètre)...