Tendrá que hacer un manejo de error personalizado. Implementamos una acción de avance a una personalizada de Symfony. Sin embargo, sea prudente, esta acción en sí podría estar desencadenando una excepción, debe tener eso en cuenta.
Lo siguiente puede ser un buen comienzo. Primero se debe agregar un detector para el evento, un buen lugar sería ProjectConfiguration.class.php:
$this->dispatcher->connect('application.throw_exception', array('MyClass', 'handleException'));
Utilizando el controlador de eventos podría ser suficiente para lo que quiere hacer con la excepción, por ejemplo, si sólo desea enviar por correo un seguimiento de la pila al administrador. Queríamos reenviar a una acción personalizada para mostrar y procesar un formulario de comentarios. Nuestro gestor de eventos se veía algo como esto:
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);
}
}
Ahora puede configurar el módulo y la acción de remitir a una excepción en el archivo settings.yml
all:
.actions:
error_500_module: error
error_500_action: error500
En la misma acción que ahora puede hacer lo que querer con la excepción, ej. muestre el formulario de comentarios para contactar al administrador. Puede obtener la excepción usando $ request-> getParameter ('exception')
+1 ¡Muchas gracias! Nuestro sistema es compatible con la creación de temas y sin esto no habríamos sido capaces de admitir la ejecución de errores de 500 páginas también. Muy apreciado. – flu
¡Gracias por su respuesta! ¿La conexión de su función personalizada a 'application.throw_exception' * sobrescribe el comportamiento predeterminado de * symfony en ese evento? En caso afirmativo, ¿puedo evitarlo llamando a 'self :: parent()' dentro de la función personalizada? Solo me gustaría * agregar * alguna funcionalidad .. – Tapper
@Tapper deberías ser capaz de lograr eso modificando el valor de retorno, prueba $ event-> setReturnValue (false) en su lugar – Gerry