Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous !
Je bute sur une nouvelle difficulté, qui cette fois-ci n'est pas forcément liée au Framework, mais comme je l'utilise avec le modèle M.V.C., je me permets de poster sur ce forum et à nouveau de vous demander votre aide.
J'essaie de lire le contenu d'un dossier et d'afficher des liens vers ces fichiers sur une page. J'ai donc deux fonctions dans mon contrôleur. La première lit dans le répertoire, cela fonctionne, j'obtiens bien la liste des fichiers dans le PHTML associé.
Par contre, sur le texte affiché, je mets un lien vers une autre page, qui fait appel à une autre fonction de mon contrôleur, dont voici le code :
header ("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); $f_location = $_SERVER["DOCUMENT_ROOT"] . '/mtm/trunk/application/expfiles/export.csv'; $f_name = 'export.csv'; header('Content-Length: ' . filesize($f_location)); header('Content-Disposition: attachment; filename=' . basename($f_name)); readfile($f_location);
Lorsque je clique sur ce lien, le navigateur me propose bien de télécharger un fichier export.csv, qui lui par contre contient ... une de mes pages PHTML ! Le fichier correct existe pourtant bien dans le répertoire, et j'utilise le même chemin dans la fonction qui liste les fichiers ...
Quelqu'un peut-il m'aider s'il vous plaît ?
Merci,
J-Zender.
Hors ligne
il ne faut pas que ta vue fasse kkchose
donc il te faut utiliser noViewRenderer
A+JYT
Hors ligne
Merci sejaikin, mais je ne comprends pas.
Ma vue fait ceci :
<form name="fo" method = "post" action = "<?php echo $this->baseUrl; ?>/affichage/telFichier"> <table cellpadding=0 cellspacing=0 border=0 summary="Fichiers prets à etre envoyes"> <caption>Fichiers prêts à être envoyés</caption> <?php $i = 0; $max = count($this->listeFichiers); if ($this->listeFichiers != null) { for ($i=0; $i<$max; $i++) { ?> <tr> <td headers="tab1col3 tab1lig3"> <a href="javascript:document.fo.submit();"> <?php echo $this->listeFichiers[$i]; } } ?> </a> </td> <td headers="tab1col3 tab1lig3"> </td> </tr> </table> <input id="fichier" name="fichier" type="hidden" value="export.csv"> </form>
Y vois-tu quelque chose d'illicite ?
Merci,
J-Zender.
Hors ligne
lorsque tu clique sur ton lien tu active une action de ton contrôleur cette action ne dois pas utiliser de vue il te faut donc faire appel à noViewrenderer dans cette action.
sinon tu envois tes headers puis ton contenu qui est capté par ZF
une fois que ton action se termine ZF ouvre la vue associé à l'action et fait le rendu
tu perds donc ton contenu et zend_view t'envoie quelque chose. (soit une erreur soit un contenu à lui)
il te faut absolument dire à ton contrôleur que ton action se termine après la méthode d'action donc que tu ne veux pas qu'il utilise les vues.
A+JYT
Hors ligne
Ok je comprends
Tout d'abord, merci beaucoup !
Ensuite, dans le manuel, ici :
http://framework.zend.com/manual/fr/zen … front.html
nous avons le code qui permet de désactiver le rendu automatique des vues :
<?php // Désactivez l'aide ViewRenderer : $front->setParam('noViewRenderer', true);
Cependant, cela le désactive dans toute l'application. Y a-t-il un moyen de ne le désactiver que dans la fonction du contrôleur concernée ?
Hors ligne
J'ai trouvé ici :
http://julien-pauli.developpez.com/tuto … wrenderer/
Au début de la fonction concernée, dans mon contrôleur, j'ajoute :
$this->_helper->viewRenderer->setNoRender();
Merci à tous !
J-Zender.
Hors ligne