È necessario eseguire una gestione personalizzata degli errori. Abbiamo implementato personalmente un'azione symfony personalizzata. Siate cauti, tuttavia, anche questa azione potrebbe innescare un'eccezione, è necessario tenerne conto.
Il seguente potrebbe essere un buon inizio. In primo luogo aggiungere un listener per l'evento, un buon posto sarebbe ProjectConfiguration.class.php:
$this->dispatcher->connect('application.throw_exception', array('MyClass', 'handleException'));
Utilizzando il gestore di eventi potrebbe bastare per ciò che si vuole fare con l'eccezione, per esempio, se si desidera solo per posta una traccia dello stack per l'amministratore. Volevamo inoltrare un'azione personalizzata per visualizzare ed elaborare un modulo di feedback. Il nostro gestore di eventi sembrava qualcosa di simile:
class MyClass {
public static function handleException(sfEvent $event) {
$moduleName = sfConfig::get('sf_error_500_module', 'error');
$actionName = sfConfig::get('sf_error_500_action', 'error500');
sfContext::getInstance()->getRequest()->addRequestParameters(array('exception' => $event->getSubject()));
$event->setReturnValue(true);
sfContext::getInstance()->getController()->forward($moduleName, $actionName);
}
}
È ora possibile configurare il modulo e l'azione di trasmettere alla su un'eccezione in settings.yml
all:
.actions:
error_500_module: error
error_500_action: error500
Nella stessa azione ora si può fare quello che voglio con l'eccezione, ad es. visualizza il modulo di feedback per contattare l'amministratore. È possibile ottenere l'eccezione stessa utilizzando $ request-> getParameter ('exception')
+1 Grazie mille! Il nostro sistema supporta la tematizzazione e senza di essa non saremmo stati in grado di supportare la tematizzazione di errori di 500 pagine. Molto apprezzato. – flu
Grazie per la tua risposta! La connessione della tua funzione personalizzata a 'application.throw_exception' * sovrascrive il comportamento predefinito di symfony su quell'evento? Se sì, posso impedirlo con la chiamata 'self :: parent()' all'interno della funzione personalizzata? Vorrei solo aggiungere * alcune funzionalità .. – Tapper
@Tapper dovresti essere in grado di farlo modificando il valore di ritorno, prova invece $ event-> setReturnValue (false) – Gerry