Bonjour a tous,
j'aimerais savoir comment recuperer le contenu (rendu) d'une vue sous CakePHP 3.0, j'ai un debut de code:
$this->autoRender = false;
$this->layout = 'blank';
$this->render();
Mais avec ca, j'ai un objet de type Response (Cake\Network\Response), mais moi ce que je veux c'est avoir le contenu HTML.
Merci d'avance.
Ben la fonction render correspond à tes besoin je pense
http://api.cakephp.org/3.0/class-Cake.Controller.Controller.html#_render
qui te donne en retour
http://api.cakephp.org/3.0/class-Cake.Network.Response.html
Qui a une méthode _toString() donc tu peux appliquer un typage fort pour avoir le body
Bonjour.
Pourrais-tu donner un peu plus de précisions ?
Nous ne savons même pas si le code que tu nous montres est bien depuis l'action d'un controller ou depuis une vue.
Ni dans quel cas tu veux le faire.
En général, lorsque l'on veut afficher un autre fichier ctp que de l'action actuelle, il faut le préciser dans le $this->render().
Nous n'avons pas assez de précisions pour pouvoir te répondre efficacement, nous n'allons quand même pas te faire plusieurs propositions en faisant des déductions sur ton cas d'utilisation et sur ce que tu veux exactement.
recuperer le contenu (rendu) d'une vue
Dans le cas du controller, on y récupère pas la vue, nous ne faisons que lui dire dans quelle vue il doit rendre l'affichage de l'action.
@Lartak effectivement ^^, le code que j'ai poste fait partie d'une action (donc d'un controller) qui exporte le contenu de la vue dans un fichier PDF, ce que je veux faire c'est recuperer le contenu HTML de la vue (et non pas retourner une vue), afin de pouvoir creer le fichier PDF en question. (Donc le $this c'est celui du Controller)
Donc si je comprends bien, tu veux récupérer le contenu de l'action courante pour l'afficher sur un fichier PDF que tu génères ?
Déja une chose, comme je te l'ai dit dans ma première réponse, $this->render() ne permet pas de récupérer le contenu d'une vue.
Regardes la description de la méthode, tu verras bien : Rendre une View : Cake\Controller\Controller::render(string $view, string $layout).
@Lartak je sais bien, dans la doc j'ai pas trouve de fonction qui pouvait retourner le contenu HTML, la fonction qui s'en approchait le plus c'etait ::render(). Ce que je cherche c'est la methode a suivre pour avoir le rendu HTML de la vue.
Il n'y a aucune méthode spécifique à CakePHP qui permette de récupérer le contenu d'une vue depuis un controller, il te faut passer par du simple code PHP pour ça.
Tu peux à la rigueur voir du coté des API's Folder et File.
@Lartak c'etait possible sur Cake 2.0 je ne vois pas pourquoi ca ne serrait pas le cas dans la v3.0, peut etre qu'un autre dev peut m'aider, en tout cas merci pour ton aide : ).
Il n'a jamais été possible dans CakePHP de récupérer le contenu d'une vue depuis un controller autrement qu'en lisant le fichier ctp via du PHP.
Comme par exemple avec les API's Folder et File comme je te l'ai dit dans mon précédent post.
La seule manière qu'il existe de récupérer le contenu d'une vue avec une méthode spécifique de CakePHP, c'est via les helpers de vues (extends, element, etc...), mais seulement depuis une autre vue et non depuis les controllers.
c'etait possible sur Cake 2.0 je ne vois pas pourquoi ca ne serrait pas le cas dans la v3.0
Dans ce cas là tu n'aurais pas eu besoin de demander, tu l'aurais facilement trouvé dans l'API version 3.0.
@Lartak tout d'abord je veux te remercie pour tes efforts c'est vraiment sympa de ta part, mais il faut dire que la facons dont tu reponds aux questions l'es moins, pour la v2 de CakePHP voici un exemple :
$view = new View($this, false);
$view->set('key', 'value');
$view->layout = 'default';
$view->viewPath = 'Template';
$view->render('viewFilename');
Dans ce cas là tu n'aurais pas eu besoin de demander, tu l'aurais facilement trouvé dans l'API version 3.0
laisse moi te rappeller que beaucoup de chose ont changes depuis, meme d'un commit a l'autre des nom de fonction changent. Bon, c'est pas le plus important, je vais essaye de faire la meme chose peut etre que j'y arriverais
J'ai eu une fois un PDF à généré sur CakePHP 2
$this->layout = false;
$content = $this->render('pdf'); // <- rend la vue pdf.ctp
Puis dans $content j'ai le contenu de la vue.
Si j'en crois la Doc maintenant le render rend un objet reponse donc faudrait faire
$content = (string)$this->render(); // Pour avoir le body
Salut Grafikart, sinon ca ne fait pas l'affaire ? genre :
$view = new View($this->request, $this->render());
$view->renderLayout($this->render(), 'blank');
le probleme que j'ai c'est que ca ne prends pas en compte le layout, meme avec un :
$view->layout = 'blank';