2012-06-20 11 views
13

Ho diversi pacchetti e vorrei sapere se è possibile personalizzare le singole pagine di errore per ciascun pacchetto.Symfony2: personalizza le pagine di errore per diversi bundle

Ho letto il ricettario e gli esempi mostrano solo una pagina di personalizzazione generica per tutti i pacchetti.

C'è un modo per sovrascrivere il processo di eccezione per ogni pacchetto?

risposta

5

Lo stesso listener dovrebbe rilevare che - Non sono a conoscenza di alcun modo per specificare un listener per un singolo bundle.

<? 

namespace Your\MainBundle\EventListener; 
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; 

class YourExceptionListener 
{ 
    public function onKernelException(GetResponseForExceptionEvent $event) 
    { 
    $exception = $event->getException(); 
    $namespace = new \ReflectionObject($event->getController())->getNamespaceName(); 

    switch ($namespace) 
    { 
     case 'Acme\\DemoBundle': 
     // do whatever with $exception here 
     break; 
     case 'Some\\OtherBundle': 
     // do whatever with $exception here 
     break; 
     case 'Your\\MainBundle': 
     // do whatever with $exception here 
     break; 
     default; 
     // default 
    } 
    } 
} 

e registrarlo

//services.yml 
kernel.listener.yourlistener: 
    class: Your\MainBundle\YourExceptionListener 
    tags: 
    - { name: kernel.event_listener, event: kernel.exception, method: onKernelException } 
-1

C'è un pacco che ho fatto per cattura diverse pagine errori dalla configurazione di percorsi regex, funziona dall'ascoltatore "kernel.exception_listener" e il "kernel.exception "evento come descritto nella documentazione (http://symfony.com/doc/current/cookbook/controller/error_pages.html#use-kernel-exception-event).

Con questo pacchetto, è possibile:

  • Cambiare il modello di eccezione ramoscello dalla regex del percorso che si desidera
  • modificare il modello eccezione ramoscello per certains codice di stato HTTP solo
  • Attiva/disattiva la modello personalizzato per la modalità di debug

link al fascio (licenza MIT): https://github.com/Kwrz/TwigException

Grazie per la tua idea, Peter, penso di aggiungere una funzione nella prossima versione del mio pacchetto per definire il modello dallo spazio dei nomi del bundle corrispondente.