Bonjour,
j'ai une petite question sur le Router (le tutoriel de Grafikart).
Voilà, j'aimerai savoir comment je peux récupérer mon instance du router dans une vue (j'utilise une architecture MVC) .
Ce qui me permettra d'utiliser la fonction url pour générer des urls en fonction de leur nom :
$this->Router->url('posts_all', ['id' => 12]); par exemple
Cette question peut paraitre débile mais je ne sais pas comment faire.
Merci
Bonjour,
Dans votre router.php, vous créez une fonction static et vous l'appeler dans votre vue de cette façon :
Router::ma_fonction('params');
Merci de ta réponse rapide.
J'y ai pensé avec un getInstance() mais je préfère éviter le static.
Salut,
Si tu veux éviter le static.
Il faudrait, dans le controller en question, et dans la méthode en question, enregistrer une instance du Router dans une variable $router, et passer cette varaible à la vue.
Ça me semble être une mauvaise façon de faire.
Utiliser le static à bon escient n'est pas une mauvaise façon de coder, et il semble que dans ta situation ça soit la meilleure façon de faire (d'utiliser un static).
Par contre si j'essaie de prendre du recul j'ai l'impression que tu t'y prends de travers.
"Normalement", dans le tutoriel de Grafikart, il me semble que dans le controlleur tu récupère une variable $post qui est un objet, instance de la classe "PostEntity".
Du coup tu as accès à l'id du post de cette façon :
$post->getId();
et tu utilise un lien vers ce post de cette façon :
<a href="DOSSIER_ROOT_DE_TON_SITE ?>/public/index.php?p=posts.show&id=<?= $post->getId(); ?>">Voir l'article</a>
Ou alors il me semble qu'il y a une fonction getURL() dans la classe "PostEntity", du coup quelque chose comme :
// class PostEntity
public function getURL()
{
echo "DOSSIER_ROOT_DE_TON_SITE/public/index.php?p=posts.show&id=$this->getId()";
}
// HTML
<a href="<?= $post->getURL() ?>">Voir l'article</a>
Tu as peut-être modifié un peu pour arranger comme ça t'arrange et si c'est ça c'est très bien.
Mais comme tu dis que tu as suivi le tutoriel j'ai trouvé ça un peu étrange.
Merci de ta réponse SLK. J'ai suivi la formation POO ainsi que le tutoriel sur le Router.
J'ai remplacé le système qui gère les controllers (public/index.php?p=posts.show&id=$this->id) par le router $router->get('/posts/:id', 'Posts@view')->with('id', '[0-9]+');
Logiquement je peux récupérer le paterne de la route via le Router::url, mais ce paterne n'est accessible que sur index.php (ma page avec les routes et la définition du router) et non dans mes vues.
Sinon je vais réfléchir à la solution du static, mais plus tard je n'ai pas vraiment le temps en ce moment :) .