Page 1 sur 1

Gérer twig sans symfony - afficher un article

Posté : 30 avr. 2017, 14:33
par Connor
Bonjour à vous tous,

J'essaye de créer un blog perso pour ma familiariser avec la POO, j'ai décidé d'utiliser le moteur de template twig.
Seulement j'étais habitué à faire passer dans l'url un get type p=1 puis je récupérais mon article dont l'id correspondait à celui-ci.

Mais maintenant que j'utilise un système de routing mes urls étant de type episode/1 c'est la pataugeoire pour moi :p

Ma page home affiche tous les articles correctement, quand je cliques sur voir article ça me renvoi donc vers une page episode/1 ou /2 correspondant à l'id de l'article.

J'ai un fichier routing.php dans laquelle j'ai une fonction static public getRoutes() :

Code : Tout sélectionner

$routes->add('episode', new Route('/episode/{page}', array('_controller' => 'PostController::showAction'))); return $routes;
Ensuite j'ai mon PostController qui ressemble à ça :

Code : Tout sélectionner

public function showAction($page = null) { $entityManager = $this->getDoctrine(); $articles = $entityManager->getRepository("Entities\Article")->findAll(); $commentaire = $entityManager->getRepository("Entities\Commentaire")->findAll(); return $this->render('episode.html.twig',[ 'page' => $page, 'articles' => $articles, 'commentaire' => $commentaire ]); }
Dans ma vue post.html.twig, je ne vois pas comment faire pour afficher seulement les caractéristiques de l'article correspondant à l'id dans l'url. Je ne sais même pas si ma configuration de mon code précédent est bonne.

Je vous remercie par avance.

Re: Gérer twig sans symfony - afficher un article

Posté : 02 mai 2017, 11:52
par zigz4g
Bonjour,
Je ne suis pas sûr de comprendre la différence entre page et id dans ton code ?
Tu veux faire un listing d'épisode ou le détail d'un épisode ?

Re: Gérer twig sans symfony - afficher un article

Posté : 02 mai 2017, 12:42
par Connor
Oui c'est vrai que j'ai du mal à l'expliquer clairement, en fait, j'ai ma page home sur laquelle j'ai le listing de tous mes articles et ça fonctionne.
Quand je clique sur voir article j'ai bien le lien correspondant /1 mais je n'arrive pas à afficher juste l'article correspondant à l'id dans l'url

id = page oui je n'ai pas été très précis.

Re: Gérer twig sans symfony - afficher un article

Posté : 02 mai 2017, 13:10
par zigz4g
Ok, je penses que tu confond entre Id = identifiant unique d'un épisode et un numéro de page pour charger une liste d'épisode.
Pour essayer de t'expliquer :
Homepage => listing des épisodes (controller:action => MyController:indexAction, url = "/") dans ton template tu auras une boucle sur tes épisodes.
Chaque épisode a un lien "détail" qui va sur une url du type "/episode/{id}"

Dans ton controller tu auras une autre méthode qui gérera le détail de l'épisode (controller:autreAction => MyController:detailAction, url = "/episode/42").
Tu devras avoir un bout de code qui va récupérer l'identifiant de l'épisode et le chercher dans ta base de données (http://symfony.com/doc/current/doctrine ... or-objects).
Une fois que tu as ton objet hydraté par les données, tu le passe à ta vue.

Re: Gérer twig sans symfony - afficher un article

Posté : 02 mai 2017, 13:35
par Connor
$routes->add('episode', new Route('/episode/{page}', array('_controller' => 'PostController::showAction')));
return $routes;

Dans mon fichier routing c'est ce que j'ai, pour ce côté là nous sommes d'accord c'est ok ? Mais j'ai du mal à saisir comment je récupère ce episode/{page} dans ma vue.

Re: Gérer twig sans symfony - afficher un article

Posté : 08 mai 2017, 12:02
par zigz4g
Dans ton action, tu sélectionne ta vue et tu lui passe des paramètres ($page, $articles, $commentaire).
return $this->render('episode.html.twig',[
'page' => $page,
'articles' => $articles,
'commentaire' => $commentaire
]);
Pourquoi ne pas faire une requête via ton entité pour récupérer uniquement un article ?
$article = $entityManager->getRepository("Entities\Article")->find($page);
Dans ce cas, tu sors uniquement l'information de ton épisode et tu l'as directement dans ta vue car tu l'envoie en paramètre.

Code : Tout sélectionner

{% for item in article %} <li>{{ item.libelle }} - {{ item.autre_info }}</li> {% endfor %}