En PHP existe una función llamada set_error_handler, la cual me permite establecer una función mía para manejar los errores de PHP (PHP tiene distintos tipos de errores y puedo definir distintos manejadores para cada tipo de error).
Entonces, para que todos los errores de PHP (incluyendo WARNINGS) sean enviados a mi manejador (para arrojar una excepción en su lugar) es implementado con el siguiente código:
set_error_handler("my_warning_handler", E_ALL);
function my_warning_handler($errno, $errstr, $errfile, $errline, $errcontext) {
throw new Exception( $errstr );
}
Seleccionando E_ALL, cualquier tipo de error es enviado a mi función para arrojar una excepción.
Los distintos tipos de errores que tiene PHP son:
- E_ALL
- E_WARNING
- E_ERROR
- E_PARSE
- E_CORE_ERROR
- E_CORE_WARNING
- E_COMPILE_ERROR
- E_COMPILE_WARNING
- E_STRICT
- http://www.php.net/manual/en/function.set-error-handler.php
- http://www.php.net/manual/en/ref.errorfunc.php
Espero que les sirva.
hola llevo dias buscando una solucion como capturar el warning y enviar otro mensaje o otra accion y no entiendo como pudo hacer correr si me pudieras ayudar.}}te lo agradesco
ResponderEliminarLa pregunta no se entiende muy bien, te respondo según lo que entiendo:
ResponderEliminarLa función de arriba permite capturar el warning y lanzar una excepción. Capturando la excepción puedes procesarla y llamar a una función o método de alguna clase. Si deseas capturar el warning en un controller de Yupp, para enviar el mensaje de la excepción a otra acción de un controller, debes utilizar el método redirect() de YuppController: https://code.google.com/p/yupp/source/browse/trunk/YuppPHPFramework/core/mvc/core.mvc.YuppController.class.php
Un ejemplo de redirect: return $this->redirect(array('action'=>'displayPageRO', 'params'=>array('pageId'=>1)));
Código del ejemplo: https://code.google.com/p/yupp-cms/source/browse/trunk/yupp-cms/controllers/apps.cms2.controllers.CmsController.class.php
Saludos.
Gracias me sirvió de mucho tu ayuda, era justo lo que necesitaba.
ResponderEliminar