Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai fais un plugin pour afficher le resultat du profiler mysql.
J'ai donc en dispatchLoopShutdown:
<?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
Hors ligne
Hello,
Si tu utilises le ViewRenderer :
<?php /** * MyDebug */ class MyDebug extends Zend_Controller_Plugin_Abstract { public function dispatchLoopShutdown() { $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); $viewRenderer->view->debug = ...; } }
A+
Hors ligne
Merci de ta réponse mais ça marche pas
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
Hors ligne
Salut,
Ca tombe bien je voulais faire exactement pareil que toi et evidemment ça ne marche pas non plus
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:
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()
Dernière modification par Asfaloth (03-06-2008 13:06:09)
Hors ligne
Toujours personne?
Hors ligne
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
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
up
Hors ligne
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:
$front = $this->getFrontController(); $pluginName = $front->getPlugin('nomDeTonPlugin');
A mettre dans l'init ou dans l'action de ton choix.
A+
Hors ligne
Merci pour l'info !
Mais c'est un peu l'inverse que je veux faire : acceder à une vue à partir d'un plugin.
Hors ligne
Salut,
J'ai trouvé une solution mais je ne sais pas si elle va te convenir.
$response = $this->getResponse(); $response->appendBody($tonContent);
A+
Hors ligne
Salut,
je viens de trouver une autre solution qui pourrait plus te convenir.
//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
Merci beaucoup je teste ça de suite !
Ca marche impec en postDispatch
Merci encore ça faisait un bail!
Dernière modification par sebondus (12-06-2008 10:57:13)
Hors ligne
Pages: 1