Affichage dynamique

Par alexandre garnier, il y a 10 ans


Bonjour,

Je débute avec symfony 2 (ma version est la 2.8.4), et je rencontre un probléme tout simple mais je bloque.
J'ai creer un petit blog , j'ai une page d'index qui affiche le titre de l'article et un resumé de l'article

Ce que je fais

mon controller est comme ça

class PostController extends Controller { public function indexAction() { $repository=$this->getDoctrine() ->getManager() ->getRepository('BlogBundle:Post') ; $listearticles= $repository->findAll(); return $this->render('BlogBundle:Post:index.html.twig', array('articles' => $listearticles)); } public function showAction() { return $this->render('BlogBundle:Post:show.html.twig', array('articles' => $listearticles)); } }

ma page index

{% extends 'layout.html.twig' %} {% block main %} {% for post in articles %} <article class="post"> <h2> <a href="{{ path('post_show') }}"> {{ post.title }} </a> </h2> {{ post.id }} {{ post.summary }} </article> {% endfor %} {% endblock %}

Ce que je voudrais faire

Je voudrais que le titre soit cliquable vers l'article en question

Ce que j'obtiens

rien , je ne sais pas comment m'y prendre

4 réponses

Lartak, il y a 10 ans

Bonjour.
Pour commencer, est-ce que tu as par exemple visionné des tutoriels » Tous les tutoriels Symfony 2 et/ou formation » Symfony 2.4 : Création d'un e-commerce qui sont présent(e)s sur le site ?
Ensuite, sans parler précisément de Symfony, est-ce que tu as des connaissances en POO ?
Car vu ce que tu as fait dans ta fonction showAction, j'en doute.

alexandre garnier, il y a 10 ans

Bonjour Lartak
Non je n'ai pas regarder les tutoriels ni la formation car la doc de symfony m'a permis de demarrer mon projet sans difficulté.
Pour répondre à deuxiéme question à propos de mes connaissances en POO, oui j'ai quelques notions de POO rien d'extraordinaire ( sans doute pas assez) cela parait évidant car le probléme que je rencontre est enfantin mais malhuresement je ne vois pas comment le résoudre

nico41, il y a 10 ans

bonjour,

{% extends 'layout.html.twig' %} {% block main %} {% for post in articles %} <article class="post"> <h2> <a href="{{ path('post_show', {id: post.id) }}"> {# ajout de l'id de l'article en parametre de ta route vers PostController::showAction #} {{ post.title }} </a> </h2> {{ post.id }} {{ post.summary }} </article> {% endfor %} {% endblock %}

route vers post, dans ton fichier de routing, ici exemple en yaml

post_show: path: /chemin/vers/article/{id} ## <= id en parametre ( entre accolades) defaults: { _controller: BlogBundle:Post:show } ## <= ton controller methods: ["get"] requirements: id: \d+ ## <= à quoi doit correspondre id, ici il doit être un nombre public function showAction($id) // <= $id = identifiant de l'article { $article = $this->getDoctrine()->getRepository('BlogBundle:Post')->find($id); if(!$article) { // il n'y a pas d'article correspondant => erreur 404 ou redirection ou ce que tu veux ... } return $this->render('BlogBundle:Post:show.html.twig', array('article' => $article)); }
Balbert, il y a 10 ans

Salut @Alexandre,

Voici exemple simple :

Dans ton controller;

use BlogBundle\Entity\Post; class PostController extends Controller { public function indexAction() { $posts = $this->getDoctrine()->getRepository('BlogBundlle:Post')->findAll(); return $this->render( 'BlogBundle:Post:show.html.twig', array('posts' => $posts) ); } public function showAction(Post $post) { return $this->render( 'BlogBundle:Post:show.html.twig', array('post' => $post) ); } }

Routing.

blog.post.index: path: /articles defaults: {_controller: BlogBundle:Post:index } blog.post.show: path: /article/{post} # tous les urls qui correspondent à /article/1, /article/2 etc... defaults: {_controller: BlogBundle:Post:show } requirements: post: \d+ # signifie que le parametre post est un entier[ par defaut les parametres sont des chaines.]

Tes vues

Dans index.html.twig

{% extend 'BlogBundle::layout.html.twig' %} {% block main %} {% for post in posts %} <article class="post"> <h2> <a href="{{ path( 'blog.post.show', {post : post.id }) }}">{{ post.title }} </a> </h2> <p> {{ post.summary }} </p> </article> {% endfor %} {% endblock %}

Dans show.html.twig =>

{% extend 'BlogBundle::layout.html.twig' %} {% block main %} <article> <h2 class="post"> <a href="{{ path( 'blog.post.show', {post : post.id }) }}">{{ post.title }} </a> </h2> <p> {{ post.content }} </p> </article> {% endblock %}

Voila Voila