Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-09-2014 16:05:54

DDUC
Membre
Date d'inscription: 18-07-2014
Messages: 18

Gestion des événements

Bonjour à tous!

J'aimerai renvoyer un pdf créer avec FPDF, sauf que ZF2 me renvoie automatiquement la vue. En cherchant je dis que cela est dû à un déclencheur, alors je me suis mis dessus sauf que sur les différents tutos que je trouve, je ne voie nulle part où l'on indique où stocker les classe devant me servirent de gestionnaires d'événement, ni aucune nomenclature si il y'en a bien sûr. S'il vous plait j'aimerai bien savoir où stocker lms gestionnaires d'événement dans arborescence de mes modules et si possible avoir une explication simple sur  comment cours-circuiter des événements.

Merci smile

Hors ligne

 

#2 09-09-2014 20:14:01

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Gestion des événements

Bonjour,
je ne suis pas bien sur de comprendre l'histoire des événements.
Par contre pour ne pas afficher ton template de vue dans ton action, tu peu mettre ton ViewModel en terminal:

Code:

$view = new ViewModel();
...
bla bla bla
...
$view->setTerminal(true);

Si ce n'est pas ca que tu recherchais, je te demanderai un peu plus de précision ^^

Hors ligne

 

#3 10-09-2014 10:19:34

DDUC
Membre
Date d'inscription: 18-07-2014
Messages: 18

Re: Gestion des événements

Merci flobrflo smile pour ta réponse, sauf que si je ne me trompe pas, $view->setTerminal(true) me permet de ne pas afficher mon layout, mais le template est toujours affiché. Alors comment faire pour qu'il renvoie ni le layout, ni le template aussi afin de pouvoir envoyer un pdf à la place par exemple.

Merci!

Dernière modification par DDUC (10-09-2014 10:21:04)

Hors ligne

 

#4 10-09-2014 14:20:54

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Gestion des événements

Salut, pour télécharger un fichier il faut changer le header de ta requête wink.

Hors ligne

 

#5 10-09-2014 20:47:04

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Gestion des événements

Tu peu passer par la classe Response de ZF2, ça permet de gérer très convenablement la sortie de ton controller
(très pratique pour un retour du json notamment ^^)

Hors ligne

 

#6 14-10-2014 17:51:33

DDUC
Membre
Date d'inscription: 18-07-2014
Messages: 18

Re: Gestion des événements

J'ai trouvé!
il suffit d'utiliser code qui suit pour faire cela.

Code:

return new \Zend\Http\PhpEnvironment\Response();

Cela permet de ne pas renvoyer ni le layout et ni la vue. Il renvoie un objet de réponse vide.
On le mettant juste après l’envoie de notre pdf, il agit comme si on faisait un exit() qui parait être barbare.
En tout cas merci pour vos réponse.

Cordialement.

Dernière modification par DDUC (14-10-2014 17:58:55)

Hors ligne

 

#7 15-10-2014 00:15:52

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Gestion des événements

flobrflo a écrit:

Tu peu passer par la classe Response de ZF2, ça permet de gérer très convenablement la sortie de ton controller
(très pratique pour un retour du json notamment ^^)

Hou le vilain. smile

Pour ça il y a le JsonModel.

DDUC a écrit:

J'ai trouvé!
il suffit d'utiliser code qui suit pour faire cela.

Code:

return new \Zend\Http\PhpEnvironment\Response();

Cela permet de ne pas renvoyer ni le layout et ni la vue. Il renvoie un objet de réponse vide.
On le mettant juste après l’envoie de notre pdf, il agit comme si on faisait un exit() qui parait être barbare.
En tout cas merci pour vos réponse.

Cordialement.

Pour cet usage il y a le \Zend\Http\Response\Stream;


22914720

Hors ligne

 

#8 15-10-2014 10:02:39

DDUC
Membre
Date d'inscription: 18-07-2014
Messages: 18

Re: Gestion des événements

Bouks! Un lien ou l'on explique de façon explicite avec des exemple si possible sur la classe  \Zend\Http\Response
me serai d'une grande aide car j'en trouve pas. big_smile

Hors ligne

 

#9 15-10-2014 10:13:47

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Gestion des événements

Là il n'y a rien de compliqué tu créés une instance de \Zend\Http\Response dans ton contrôleur et tu la retourne en remplissant ce dont tu as besoin smile.

Hors ligne

 

#10 15-10-2014 10:41:58

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Gestion des événements

http://framework.zend.com/manual/2.0/en … e-examples

Il n'y a rien de mieux que la doc wink

bon je te conseil qu'en même de faire un setContent autrement, mais au moins tu a toutes les clefs en main ^^

Dernière modification par flobrflo (15-10-2014 15:08:10)

Hors ligne

 

#11 15-10-2014 11:40:42

DDUC
Membre
Date d'inscription: 18-07-2014
Messages: 18

Re: Gestion des événements

ok! je vois c'est nettement mieux mais le problème est que dans la syntaxe le <<<EOS ne se ferme pas à la rencontre du EOS fermant. Du coup tout le reste de mon code est prix comme fessant parti de la chaîne de caractère. Alors bonjour le bug sad
voici ce que m'affiche le bug

Code:

Parse error: syntax error, unexpected '"', expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\Program Files\Zend\Apache2\htdocs\ebanking\module\Administration\src\Administration\Controller\TracesUsersController.php on line 293

Je précise que la fermeture de mon <<<EOS se trouve à la ligne 206

Hors ligne

 

#12 15-10-2014 12:03:52

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Gestion des événements

peut tu nous montrer le bout de code?
apparemment tu à mis une double quote en trop.

Hors ligne

 

#13 15-10-2014 12:19:23

DDUC
Membre
Date d'inscription: 18-07-2014
Messages: 18

Re: Gestion des événements

k! voici l'action qui me permet d'envoier un pdf ou un cvs selon le choix de l'utilisateur

Code:

public function printConsultationAction(){
        set_time_limit(0);
        $session = new SessionContainer('user');
         
        if($session->offsetExists('userId')) {
            $userId = $session->userId;
            
            //if($request->isXmlHttpRequest() && $request->isPost()){
                $format = $this->params('format',null);
                $option = $this->params('option', null);
                $racine = $this->params('racine', null);
                $debut = $this->params('debut', null);
                $fin = $this->params('fin', null);
                if(!is_null($debut)) {
                    $tab[0] = substr ( $debut , 0 , 4 );
                    $tab[1] = substr ( $debut , 4 , 2 );
                    $tab[2] = substr ( $debut , 6 , 2 );
                    $debut = $tab[2].'/'.$tab[1].'/'.$tab[0];
                    $debut = $debut.' 00:00:00';
                }
                if(!is_null($fin)) {
                    $tab[0] = substr ( $fin , 0 , 4 );
                    $tab[1] = substr ( $fin , 4 , 2 );
                    $tab[2] = substr ( $fin , 6 , 2 );
                    $fin = $tab[2].'/'.$tab[1].'/'.$tab[0];
                    $fin = $fin.' 23:59:59';
                }
                // Mettre les filtres sur les champs ici
                try {
                    
                    $response = new Response();
                    $response->setStatusCode(Response::STATUS_CODE_200);
                    $response->getHeaders()->addHeaders(array(
                        'HeaderField1' => 'header-field-value',
                        'HeaderField2' => 'header-field-value2',
                    ));
                    $response->setContent(<<<EOS
                    <html>
                    <body>
                        Hello World
                    </body>
                    </html>
                    EOS);
                    
                    $consultations = $this->getSessionsLogTable()->traceAdhesions( $option, $racine, $debut, $fin );
                    
                    if ($format == "pdf") {
                        $view = new ViewModel(array(
                            'consultations' => $consultations,
                            'option' => $option
                        ));
                        $view->setTemplate('Administration/traces-users/print-consultations');
                        $view->setTerminal(true);
                        $render = $this->getServiceLocator()->get('ViewRenderer');
                        $html = $render->render($view);
                        //echo $html;
                        //exit();
                        
                        
                        $pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
                        
                        // set document information
                        $pdf->SetCreator(PDF_CREATOR);
                        $pdf->SetAuthor(PDF_AUTHOR);
                        $pdf->SetTitle(PDF_HEADER_STRING);
                        $pdf->SetSubject('Liste des consultations des clients');
                        $pdf->SetKeywords('PETI, Historique, centre, compte');
                        
                        // set default header data
                         
                        //$soustitle = PDF_HEADER_STRING.'Relevé du compte bancaire '.$compte->numero."\nPETI Ebanking, le ".date('d/m/Y');
                        $soustitle = "";
                        
                        $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, $soustitle, array(119,41,83), array(119,41,83));
                        $pdf->setFooterData(array(119,41,83), array(119,41,83));
                        // set header and footer fonts
                        $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
                        $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
                        
                        // set default monospaced font
                        $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
                        
                        // set margins
                        $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
                        $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
                        $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
                        
                        // set auto page breaks
                        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
                        
                        // set image scale factor
                        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
                        
                        // set some language-dependent strings (optional)
                        if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
                            require_once(dirname(__FILE__).'/lang/eng.php');
                            $pdf->setLanguageArray($l);
                        }
                        
                        // ---------------------------------------------------------
                        
                        // set font
                        $pdf->SetFont('helvetica', '', 9);
                        
                        // add a page
                        $pdf->AddPage();
                        
                        // create some HTML content
                        //$html = '<h1>Example of HTML text flow</h1>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. <em>Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur?</em> <em>Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</em><br /><br /><b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i><br /><br /><b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u>';
                        
                        // output the HTML content
                        $pdf->writeHTML($html, true, 0, true, 0);
                        
                        // reset pointer to the last page
                        $pdf->lastPage();
                        
                        // ---------------------------------------------------------
                        
                        //Close and output PDF document
                        $pdf->Output('download.pdf', 'I');
                    }
                    else {
                       header("Content-type: application/vnd.ms-excel");
                       header("Content-disposition: attachment; filename=consultations.csv");
                       $arr = array();
                       $i = 0;
                       if($option == 1) {
                           foreach ($consultations as $row) {
                               $arr[$i][0] = $row["nom"];
                               $arr[$i][1] = $row["prenom"];
                               $arr[$i][2] = $row["racine"];
                               $arr[$i][3] = $row["nbconnexion"];
                               $dat = new \DateTime($row["date_connexion"]);
                               $arr[$i][4] = $dat->format('Y-m-d H:i:s');
                               ++$i;
                           }
                       }
                       elseif($option == 2) {
                           foreach ($consultations as $row) {
                               $arr[$i][0] = $row["nom"];
                               $arr[$i][1] = $row["prenom"];
                               $arr[$i][2] = $row["racine"];
                               $arr[$i][3] = $row["tel"];
                               $dat = new \DateTime($row["dateheure"]);
                               $arr[$i][4] = $dat->format('Y-m-d H:i:s');
                               $arr[$i][3] = $row["categorie"];
                               ++$i;
                           }
                       }
                       echo $this->array_to_csv($arr);
                       //echo var_dump($arr);
                        //exit();
                       return new \Zend\Http\PhpEnvironment\Response();
                    }
                    
                    return new \Zend\Http\PhpEnvironment\Response();
                } catch (\Exception $ex) {
                    $view = new ViewModel(array(
                        'err' => $ex
                    ));
                    $view->setTerminal(true);
                     
                    return $view;
                }
            //}
        }
    }

mais quand je réduit ce code à ce qui suit

Code:

public function printConsultationAction(){
        set_time_limit(0);
        $session = new SessionContainer('user');
         
        if($session->offsetExists('userId')) {
            $userId = $session->userId;
            
            //if($request->isXmlHttpRequest() && $request->isPost()){
                $format = $this->params('format',null);
                $option = $this->params('option', null);
                $racine = $this->params('racine', null);
                $debut = $this->params('debut', null);
                $fin = $this->params('fin', null);
                if(!is_null($debut)) {
                    $tab[0] = substr ( $debut , 0 , 4 );
                    $tab[1] = substr ( $debut , 4 , 2 );
                    $tab[2] = substr ( $debut , 6 , 2 );
                    $debut = $tab[2].'/'.$tab[1].'/'.$tab[0];
                    $debut = $debut.' 00:00:00';
                }
                if(!is_null($fin)) {
                    $tab[0] = substr ( $fin , 0 , 4 );
                    $tab[1] = substr ( $fin , 4 , 2 );
                    $tab[2] = substr ( $fin , 6 , 2 );
                    $fin = $tab[2].'/'.$tab[1].'/'.$tab[0];
                    $fin = $fin.' 23:59:59';
                }
                // Mettre les filtres sur les champs ici
                try {
                    
                    $response = new Response();
                    $response->setStatusCode(Response::STATUS_CODE_200);
                    $response->getHeaders()->addHeaders(array(
                        'HeaderField1' => 'header-field-value',
                        'HeaderField2' => 'header-field-value2',
                    ));
                    
                    $response->setContent(<<<EOS
                    <html>
                    <body>
                        Hello World
                    </body>
                    </html>
                    EOS);
                    
                    }
                    
                    return new \Zend\Http\PhpEnvironment\Response();
                } catch (\Exception $ex) {
                    $view = new ViewModel(array(
                        'err' => $ex
                    ));
                    $view->setTerminal(true);
                     
                    return $view;
                }
            //}
        }
    }

voici l'erreur qui est afficher

Code:

Parse error: syntax error, unexpected end of file in C:\Program Files\Zend\Apache2\htdocs\ebanking\module\Administration\src\Administration\Controller\TracesUsersController.php on line 272

Certe la je ne renvoie pas de pdf, c'est juste que je faire un essaie avec du texte premièrement.

Dernière modification par DDUC (15-10-2014 12:27:32)

Hors ligne

 

#14 15-10-2014 12:39:42

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Gestion des événements

euh, ça réglera certainement pas ton soucis, mais après avoir initialisé ton $objet response, tu retourne un nouvel objet vide avec :

Code:

[lang=php] 
return new \Zend\Http\PhpEnvironment\Response();

ce qui rend la config inutile.

fait le passer avec return $response;



Et le "unexpected end of file", regarde bien la syntaxe de toute ta classe, tu peut-être oublié un "}"

Dernière modification par flobrflo (15-10-2014 12:41:17)

Hors ligne

 

#15 15-10-2014 13:23:23

DDUC
Membre
Date d'inscription: 18-07-2014
Messages: 18

Re: Gestion des événements

Franchement, du côté de cette piste rien à faire. J'ai vérifier et tout mes blocs sont bien fermés. Mais des que j'ouvre l'instruction <<<EOS, tout le code restant est pris pour du texte

Hors ligne

 

#16 15-10-2014 13:57:14

DDUC
Membre
Date d'inscription: 18-07-2014
Messages: 18

Re: Gestion des événements

Autant pour moi! j'ai fait des recherche du côté de php à cette adresse Les chaînes de caractères. ET cette façon d'écrire du texte est appelée "Heredoc".
Mon erreur à été d'avoir indenté l'identifiant de fin et d'avoir mal terminer l'expression $response->setContent(<<<EOS...

Résultat, j'ai un beau hello world qui s'affiche. smile

Merci à vous! big_smile

Hors ligne

 

#17 15-10-2014 14:57:41

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Gestion des événements

Tu peux aussi utiliser des services parce que là ton contrôleur c'est un peu sale ... Si jamais tu veux générer ce même pdf ailleurs dans une autre action tu fais comment ? Du copier/coller ? Dans ce cas dès que tu vas modifier à un endroit faudra le modifier partout ?

Ensuite je suis pas sur que tu sois obligé d'utiliser cette notation pour le setContent et là pour le coup dans ton exemple tu t'en fous du contenu puisque c'est le header qui importe.

Hors ligne

 

#18 15-10-2014 15:03:18

DDUC
Membre
Date d'inscription: 18-07-2014
Messages: 18

Re: Gestion des événements

Merci Orkin c'est très bien pensé. Sauf que je me suis mis récemment sur les service donc par rapport à sa j'ai des questions donc je vais ouvrir une nouvelle discussion pour sa.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages