Foros del Web » Programando para Internet » PHP » Symfony »

Capturar Excepciones

Estas en el tema de Capturar Excepciones en el foro de Symfony en Foros del Web. Siguiendo con mi proyecto, necesito conocer mas sobre el manejo de excepciones en symfony. Segun entiendo es igual con los bloques Try y catch, pero ...
  #1 (permalink)  
Antiguo 10/11/2013, 22:39
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Exclamación Capturar Excepciones

Siguiendo con mi proyecto, necesito conocer mas sobre el manejo de excepciones en symfony.
Segun entiendo es igual con los bloques Try y catch, pero la verdad no me queda muy claro.

He intentado con esto:

try {...}
catch(\Exception $e) {
throw new Exception('mensaje error', $code->getCode());
return.....
}

pero cuando se lanza la excepcion la pagina se queda en blanco :/ alguna idea de cual sea el problema?

Última edición por ana_arcon; 10/11/2013 a las 22:49
  #2 (permalink)  
Antiguo 11/11/2013, 09:44
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Capturar Excepciones

Cita:
Iniciado por ana_arcon Ver Mensaje
Siguiendo con mi proyecto, necesito conocer mas sobre el manejo de excepciones en symfony.
Segun entiendo es igual con los bloques Try y catch, pero la verdad no me queda muy claro.

He intentado con esto:

try {...}
catch(\Exception $e) {
throw new Exception('mensaje error', $code->getCode());
return.....
}

pero cuando se lanza la excepcion la pagina se queda en blanco :/ alguna idea de cual sea el problema?
Lo que necesitas es solo lanzar la excepcion, symfony la meneja de forma interna. Si quieres lanzar una respuesta 404 al navegador puedes hacer uso del metodo createNotFoundException
Código PHP:
Ver original
  1. public function indexAction()
  2. {
  3.     // retrieve the object from database
  4.     $product = ...;
  5.     if (!$product) {
  6.         throw $this->createNotFoundException('The product does not exist');
  7.     }
  8.  
  9.     return $this->render(...);
  10. }

Si lanzas un Exception, de manera interna Symfony lo devuelve como un error 500
Código PHP:
Ver original
  1. throw new \Exception('Something went wrong!');
Te dejo la liga a la documentación: http://symfony.com/doc/current/book/...-and-404-pages
*los ejemplo son del manual
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 11/11/2013, 13:47
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Capturar Excepciones

me parece que con eso lo unico que logro es cambiar el mensaje que lanza pero en realidad lo que necesito es que cuando surja la exception se envie un mensaje y siga el resto del programa.
  #4 (permalink)  
Antiguo 11/11/2013, 15:53
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Capturar Excepciones

Supongo entonces que no quieres que la excepcion la capture symfony de ser así, es como lo habías probado pero cambia un poco tu código a lo siguiente
Código PHP:
Ver original
  1. try{
  2.            //punto donde lanzas la excepcion
  3.             throw new \Exception('Esta es una prueba');
  4.  
  5.         }catch (\Exception $e){
  6.            //manejo de la excepcion
  7.             echo $e->getMessage();
  8.         }
Con eso manejas la excepcion antes de que la intente manipular symfony.

Si tampoco es lo que necesitas, comenta cual es tu caso de forma especifica para ser mas claros en tu necesidad y en la respuesta que se te puede dar.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 11/11/2013, 16:09
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Capturar Excepciones

Lo ideal seria utilizar un listener en onKernelException http://symfony.com/doc/current/cookb..._listener.html y si lo que quieres hacer es simplemente enviar un email cuando hay una excepcion basta con configurar monolog http://symfony.com/doc/current/cookb...log_email.html ;)

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 11/11/2013, 16:43
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Capturar Excepciones

eso del onKernelException lo he leido pero...
pues les cuento que he logrado al menos mandar el mensaje como yo quiero
try {
...
throw $this->createNotFoundException('La asignacion ya existe, seleccione otro caso');
$em->flush();

return $this->redirect($this->generateUrl('diagnostico'));

} catch(\Exception $e){

echo $e-> getMessage();
return $this ->redirect($this->generateUrl('diagnostico_new'));
}

Lo malo ahora es que me muestra la pantalla q quiero con e lmensaje q quiero pero sin los estilos css y js :/ pero creo q ese es otro tema o talvez me falta algo ahi.
  #7 (permalink)  
Antiguo 12/11/2013, 16:48
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Capturar Excepciones

Cita:
Iniciado por ana_arcon Ver Mensaje
try {
...
throw $this->createNotFoundException('La asignacion ya existe, seleccione otro caso');
$em->flush();

return $this->redirect($this->generateUrl('diagnostico'));

} catch(\Exception $e){

echo $e-> getMessage();
return $this ->redirect($this->generateUrl('diagnostico_new'));
}
Puedes usar un Flash Message:
Código PHP:
Ver original
  1. try {
  2.             ...
  3.             throw new Exception('La asignacion ya existe, seleccione otro caso');
  4.             $em->flush();
  5.            
  6.             return $this->redirect($this->generateUrl('diagnostico'));
  7.  
  8.  } catch(\Exception $e){
  9.               $this->get('session')->setFlash('error', $e->getMessage());
  10. }

Y en tu plantilla mostrar el error con los estilos que requieres
Código HTML:
Ver original
  1. {% for flashMessage in app.session.flashbag.get('error') %}
  2.     <div class="error">
  3.         {{ flashMessage }}
  4.     </div>
  5. {% endfor %}
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #8 (permalink)  
Antiguo 12/11/2013, 22:04
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Capturar Excepciones

Pues te cuento, he probado varias maneras
-Redirect
-forward
-Response
-ahora este flash

El que mas se acerca a lo que busco es un
return new Response('<html><body>'.$e.'</body></html>');

aunq no me gusta del todo como lo hace y pues igual no muestra la plantilla que tengo :/

Muchisimas gracias por tu ayuda eh! eres excelente hhs
  #9 (permalink)  
Antiguo 13/11/2013, 14:54
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Capturar Excepciones

Help!!
por alguna extraña razón ahora ya no funciona, me lanza una excepcion q no es la que yo manejaba anteriormente, que dice todo esto:

exception 'Symfony\Component\HttpKernel\Exception\NotFoundHt tpException' with message 'La transcripcion ya existe, seleccione otro estudio' in /home/admin/NetBeansProjects/pro/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php:149 Stack trace: #0 /home/admin/NetBeansProjects/pro/src/hnr/sircimBundle/Controller/DiagnosticoController.php(112): Symfony\Bundle\FrameworkBundle\Controller\Controll er->createNotFoundException('La transcripcio...') #1 [internal function]: hnr\sircimBundle\Controller\DiagnosticoController->createAction(Object(Symfony\Component\HttpFoundat ion\Request)) #2 /home/admin/NetBeansProjects/pro/app/bootstrap.php.cache(1001): call_user_func_array(Array, Array) #3 /home/admin/NetBeansProjects/pro/app/bootstrap.php.cache(975): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation \Request), 1) #4 /home/admin/NetBeansProjects/pro/app/bootstrap.php.cache(1100): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Re quest), 1, true) #5 /home/admin/NetBeansProjects/pro/app/bootstrap.php.cache(411): Symfony\Component\HttpKernel\DependencyInjection\C ontainerAwareHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Re quest), 1, true) #6 /home/admin/NetBeansProjects/sircim/web/app_dev.php(26): Symfony\Component\HttpKernel\Kernel->handle(Object(Symfony\Component\HttpFoundation\Re quest)) #7 {main}
  #10 (permalink)  
Antiguo 14/11/2013, 15:46
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Capturar Excepciones

Al principio y antes del stack trace que te envía symfony, generalmente viene el motivo por el cual se disparo la excepcion, revisalo es importante para darnos una idea de lo que paso. Es probable que el problema se este dando por el uso del metodo createNotFoundException().

P.D. Gracias por el comentario ana_arcon, que bueno que te ha servido de ayuda lo que comentamos por aqui.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #11 (permalink)  
Antiguo 14/11/2013, 23:04
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Capturar Excepciones

Eso que he pegado es todo lo que hay, es lo de antes del stack trace :/
O dime exactamente donde sale lo que me pides.

**siento molestar tanto pero me cuesta entender de que van algunos errores.
  #12 (permalink)  
Antiguo 15/11/2013, 10:54
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Capturar Excepciones

No te preocupes para eso es el foro, en tu stack trace aparece que el problema se inicia en el método createAction dentro del controlador Diagnostico prueba hacer debug en ese método y donde usas el método createNotFoundException usa new Exception.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: excepciones, symfony2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:26.