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
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 %}
Je voudrais que le titre soit cliquable vers l'article en question
rien , je ne sais pas comment m'y prendre
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.
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
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));
}
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