Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-06-2008 10:19:58

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Comment envoyer un message à un vue à partir d'un plugin?

Bonjour,

J'ai fais un plugin pour afficher le resultat du profiler mysql.
J'ai donc en dispatchLoopShutdown:

Code:

<?php
/**
 * MyDebug
 */
class MyDebug extends Zend_Controller_Plugin_Abstract
{
    public function dispatchLoopShutdown()
    {        
        if(ENV =='DEV')
        {
            $db = Zend_Registry::get ('db');
            $profileur = $db->getProfiler ();
            
            $tempsTotal = $profileur->getTotalElapsedSecs ();
            $nombreRequetes = $profileur->getTotalNumQueries ();
            $tempsLePlusLong = 0;
            $requeteLaPlusLongue = null;
            
            foreach ( $profileur->getQueryProfiles () as $query )
            {
                if ($query->getElapsedSecs () > $tempsLePlusLong)
                {
                    $tempsLePlusLong = $query->getElapsedSecs ();
                    $requeteLaPlusLongue = $query->getQuery ();
                }
            }
        
            $this->debug =  utf8_encode ( 'Exécution de ' . $nombreRequetes . ' requètes en ' . $tempsTotal . ' secondes' . "<br/>" );
            $this->debug .= utf8_encode ( 'Temps moyen : ' . $tempsTotal / $nombreRequetes . ' secondes' . "<br/>" );
            $this->debug .= utf8_encode ( 'Requètes par seconde: ' . $nombreRequetes / $tempsTotal . ' seconds' . "<br/>" );
            $this->debug .= utf8_encode ( 'Requète la plus lente (secondes) : ' . $tempsLePlusLong . "<br/>" );
            $this->debug .= utf8_encode ( "Requète la plus lente (SQL) : <br/>" . $requeteLaPlusLongue . "<br/>" );
        }        
    }
}

Par contre je ne trouve pas comment rendre $this->debug dans un segment de mon layout ($this->layout ()->debug;), quelqu'un aurait une idée ?

Merci wink

Hors ligne

 

#2 02-06-2008 11:26:32

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Comment envoyer un message à un vue à partir d'un plugin?

Hello,

Si tu utilises le ViewRenderer :

Code:

<?php
/**
 * MyDebug
 */
class MyDebug extends Zend_Controller_Plugin_Abstract
{
    public function dispatchLoopShutdown()
    {
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
        $viewRenderer->view->debug = ...;
    }
}

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 02-06-2008 20:23:29

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: Comment envoyer un message à un vue à partir d'un plugin?

Merci de ta réponse mais ça marche pas hmm
Je parle bien de rendre ça dans un segment de mon layout et pas dans une vue, je pense que tu as bien compris ça mais on sait jamais big_smile

Hors ligne

 

#4 03-06-2008 12:51:20

Asfaloth
Membre
Lieu: Bruxelles
Date d'inscription: 13-05-2008
Messages: 83
Site web

Re: Comment envoyer un message à un vue à partir d'un plugin?

Salut,

Ca tombe bien je voulais faire exactement pareil que toi et evidemment ça ne marche pas non plus sad

J'ai essayé avec un postDispatch() à la place du dispatchLoopShutdown()

là l'affichage se fait correctement mais j'ai ce message d'erreur qui apparait:

Code:

Strict Standards: Declaration of MyPluginDebug::postDispatch() should be compatible with that of Zend_Controller_Plugin_Abstract::postDispatch() in /home/www/zend/application/common/MyPluginDebug.php on line 0

Si qqun à la solution je suis preneur, pas facile de s'y retrouver quand on commence le MVC

EDIT

J'ai rien dis, j'avais oublier de rajouter "Zend_Controller_Request_Abstract $request" entre les parenthèses du postdispatch() roll

Dernière modification par Asfaloth (03-06-2008 13:06:09)


La capacité d'apprendre est un don.
La faculté d'apprendre est un talent.
La volonté d'apprendre est un choix.
-=[ Frank Herbert ]=-

Hors ligne

 

#5 04-06-2008 10:37:27

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: Comment envoyer un message à un vue à partir d'un plugin?

Toujours personne?

Hors ligne

 

#6 04-06-2008 10:55:34

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Comment envoyer un message à un vue à partir d'un plugin?

J'écris qq chose vu que t'es toujours en attente. Si tu veux profiler ta db, pourquoi tu ne mets pas directement ton code dans le bootstrap après le dispatch() ? Peut-être qu'il y'a un truc qui m'échappe mais je ne comprends pas pourquoi tu veux afficher cette information dans la vue ? Je te dis ça parceque j'ai ton exactement le même code que toi à ce niveau.

Mais bon, désolé car je n'ai pas mieux comme réponse.

Hors ligne

 

#7 04-06-2008 20:33:36

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: Comment envoyer un message à un vue à partir d'un plugin?

Je peux pas mettre mon code après le dispatch étant donné que si je fais un export excel, je me retrouve avec les  stats du profiler à la fin de mon excel.

Pour faire ça proprement il faut vraiment que mon plugin rende le résultat dans mon layout.

Parcequ'en faisant des echo après le dispatch, j'ai beau désactiver le rendu et le layout, ils seront toujours la !

Hors ligne

 

#8 10-06-2008 10:28:30

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: Comment envoyer un message à un vue à partir d'un plugin?

up yikes

Hors ligne

 

#9 10-06-2008 15:24:26

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: Comment envoyer un message à un vue à partir d'un plugin?

Salut,
je ne sais pas si ça peut t'aider mais ça peut être utile. Pour accéder à un plugin à partir d'un contrôleur:

Code:

$front = $this->getFrontController();
$pluginName = $front->getPlugin('nomDeTonPlugin');

A mettre dans l'init ou dans l'action de ton choix.

A+

Hors ligne

 

#10 10-06-2008 17:34:51

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: Comment envoyer un message à un vue à partir d'un plugin?

Merci pour l'info !
Mais c'est un peu l'inverse que je veux faire : acceder à une vue à partir d'un plugin.

Hors ligne

 

#11 11-06-2008 01:14:26

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: Comment envoyer un message à un vue à partir d'un plugin?

Salut,
J'ai trouvé une solution mais je ne sais pas si elle va te convenir.

Code:

$response = $this->getResponse();
$response->appendBody($tonContent);

A+

Hors ligne

 

#12 11-06-2008 23:18:46

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: Comment envoyer un message à un vue à partir d'un plugin?

Salut,
je viens de trouver une autre solution qui pourrait plus te convenir.

Code:

//Récupère l'instance du layout en cours
$lyt = Zend_Layout::getMVCInstance();
//Assigne les données au segment
$lyt->assign('debug', $debug);

A mettre dans la fonction "postDispatch(Zend_Controller_Request_Abstract $request)".

A +

Hors ligne

 

#13 12-06-2008 10:28:18

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: Comment envoyer un message à un vue à partir d'un plugin?

Merci beaucoup je teste ça de suite !

Ca marche impec en postDispatch wink

Merci encore ça faisait un bail!

Dernière modification par sebondus (12-06-2008 10:57:13)

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