Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour !
Sur mon site j'essaie de désactiver le layout sur certaines pages. J'ai trouvé comment le faire dans une action, mais pour les pages d'erreur, je ne sais pas où agir.
Merci d'avance
Hors ligne
Salut, pour les pages d'erreurs c'est un peu plus complexe c'est géré en interne du framework du coup on a pas trop la main dessus. Je suis aussi intéressé pour ça parce qu'avec twig j'ai besoin de modifier le contrôleur d'erreur puisque il n'intègre pas d'équivalent au while (en php) et je suis un peu dans l'impasse pour l'instant.
Hors ligne
Bonjour, merci d'avoir répondu.
Je cherche aussi à loguer ce genre d'erreur, si vous avez une idée. Il n'y aurait pas un évènement à catcher ou quelque chose comme ça ? (je débute totalement avec Zend )
Hors ligne
Bonjour,
J'ai finalement contourné le problème en le prenant à l'envers.
J'ai défini deux layouts : un vide (layout/layout appelé par défaut par zend, et ne contenant que l'affichage de $this->content) et un contenant le html dont j'ai besoin sur les pages "normales" (layout/monprojet_layout).
J'utilise une classe controller de base dont héritent tous les contrôleurs de mon module, et dedans je change tout simplement le layout comme expliqué dans la doc :
// Change the layout:
$this->layout('layout/monprojet_layout'); // OR
$this->layout()->setTemplate('layout/monprojet_layout');
Pour les pages d'erreurs, on ne passe pas dans mon contrôleur de base, du coup j'ai un layout vide comme je le voulais.
Voilà, si ça peut dépanner quelqu'un dans l'attente d'une solution plus élégante
Par contre, pour les logs, j'ai toujours pas d'idée.
Hors ligne
Salut,
Effectivement, tu peux écouter l'évènement "dispatch.error" : http://zendframework2.de/en/cheat-sheet.html
Hors ligne
Merci beaucoup du tuyau !
Maintenant j'essaie de l'écouter. Je me suis basé sur ton bout de code dans ton post sur l'ACL, mais je m'y prends peut-être mal, je n'arrive pas à passer dans la méthode de callback ...
$sharedEvents = \Zend\EventManager\StaticEventManager::getInstance();
$sharedEvents->attach('\Zend\Mvc\Controller\ActionController', \Zend\Mvc\MvcEvent::EVENT_DISPATCH_ERROR, function(Event $event) {
// ici mon code
});
Je l'ai mis dans la fonction init() de mon module.
Je m'interroge sur le premier paramètre, je ne sais pas trop quoi mettre. J'ai aussi essayé /Zend/Mvc/Application en me basant sur le schéma que tu as mis en lien, mais sans succès.
Hors ligne
J'y suis finalement arrivé. Dans la méthode init() de mon controleur :
$sharedManager = \Zend\EventManager\StaticEventManager::getInstance();
$sharedManager->attach('Zend\Mvc\Application', 'dispatch.error',
function($e) {
$loggerErrors = new \Zend\Log\Logger;
$writer = new \Zend\Log\Writer\Stream('c:\www\logs\logfile.log');
$loggerErrors->addWriter($writer);
if ($e->getParam('exception'))
$loggerErrors->info($e->getParam('exception'));
}
);
Hors ligne