Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-10-2012 11:15:30

xenacaco
Nouveau membre
Date d'inscription: 04-10-2012
Messages: 8

Désactiver le layout pour les pages d'erreur

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 smile

Hors ligne

 

#2 04-10-2012 14:19:38

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

Re: Désactiver le layout pour les pages d'erreur

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

 

#3 04-10-2012 14:23:25

xenacaco
Nouveau membre
Date d'inscription: 04-10-2012
Messages: 8

Re: Désactiver le layout pour les pages d'erreur

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 smile)

Hors ligne

 

#4 08-10-2012 14:56:14

xenacaco
Nouveau membre
Date d'inscription: 04-10-2012
Messages: 8

Re: Désactiver le layout pour les pages d'erreur

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 smile

Par contre, pour les logs, j'ai toujours pas d'idée.

Hors ligne

 

#5 08-10-2012 23:27:32

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: Désactiver le layout pour les pages d'erreur

Salut,

Effectivement, tu peux écouter l'évènement "dispatch.error" : http://zendframework2.de/en/cheat-sheet.html

Hors ligne

 

#6 09-10-2012 11:18:27

xenacaco
Nouveau membre
Date d'inscription: 04-10-2012
Messages: 8

Re: Désactiver le layout pour les pages d'erreur

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

 

#7 23-10-2012 15:04:50

xenacaco
Nouveau membre
Date d'inscription: 04-10-2012
Messages: 8

Re: Désactiver le layout pour les pages d'erreur

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

 

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