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