Gérer twig sans symfony - afficher un article

Eléphanteau du PHP | 35 Messages

30 avr. 2017, 14:33

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.
Programmation - tuto pour débutant fait par un débutant -> http://mycodingway.com/

Mammouth du PHP | 684 Messages

02 mai 2017, 11:52

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 ?
Zigz4g

Eléphanteau du PHP | 35 Messages

02 mai 2017, 12:42

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.
Programmation - tuto pour débutant fait par un débutant -> http://mycodingway.com/

Mammouth du PHP | 684 Messages

02 mai 2017, 13:10

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.
Zigz4g

Eléphanteau du PHP | 35 Messages

02 mai 2017, 13:35

$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.
Programmation - tuto pour débutant fait par un débutant -> http://mycodingway.com/

Mammouth du PHP | 684 Messages

08 mai 2017, 12:02

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 %}
Zigz4g