Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour
Je voudrais obliger mon utilisateur à enregistrer un fichier ou à l'ouvrir sans avoir accès au chemin où le fichier est stocké.
Pour faire ceci. J'ai ecrit ce code dans mon controlleur(Le code a été simplifié au maximum)
public function modifAction () { $modif = $this->_request->getParam('nu', 0); $modifexists = new cDetailsModifs(); $resultat = $modifexists->fetchRow($modifexists->select()->where('modif = ?',$modif)); if (!$resultat) { $this->view->message="Aucune modification ne correspond à votre demande."; $this->view->erreur=true; return; }else { .... $dir='C:\sites\www\manufacturing\html\upload\modifs\\'; $this->view->fichier=$dir.$modif.$resultat->ext_fichier; } }
Ensuite, j'ai mis dans mon view modif.phtml:
<?php header("Content-type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=\'".$this->fichier."\'\""); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0,pre-check=0"); header("Pragma: public");
?>Lorsque je tape l'URI http://localhost/manufacturing/html/...f/nu/0022ext08, j'obtiens la boite de dialogue "Ouvrir, Enregistrer, Annuler' mais la page qui s'ouvre dans excel correspond réellement au contenu généré dans ma vue modif.phtml et non pas à mon fichier '0022ext08.xls'.
Dernière modification par ziedb (14-04-2008 17:52:10)
Hors ligne
tu dois avoir d'autre entete, mets un dans l'action de ton controller :
$this->view->setNoRender(true); // de memoire
ainsi que le code de ta vue.
enfin dans le cas ou tu dois afficher ton fichier
Hors ligne
Rien ne change.
Hors ligne
Bonjour,
comme l'a deja dis ndesaleux :
pour les headers utilise dans ton action des :
$this->_response->setHeader('Content-type','application/vnd.ms-excel',true);
et pas la fonction header de php (je ne sais pas a quel moment le zend va réellement les setter et les envoyer, tes headers sont peut-être écraser avant d'être réellement envoyé au navigateur).
Hors ligne
ça ne marche pas non plus!!!
Hors ligne