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

Personalizar Todos los Errores de Symfony 1.4

Estas en el tema de Personalizar Todos los Errores de Symfony 1.4 en el foro de Symfony en Foros del Web. Hola muy buenas señores, ando algo perdido en lo que busco, quizás ustedes puedan echarme una mano si lo desean, lo explico por aquí: Quiero ...
  #1 (permalink)  
Antiguo 04/04/2012, 11:12
Avatar de Z3R0N3  
Fecha de Ingreso: junio-2010
Ubicación: En algún lugar de la mancha de cuyo nombre no quiero acordarme...
Mensajes: 73
Antigüedad: 14 años, 4 meses
Puntos: 4
Personalizar Todos los Errores de Symfony 1.4

Hola muy buenas señores, ando algo perdido en lo
que busco, quizás ustedes puedan echarme una mano si lo desean, lo
explico por aquí:

Quiero personalizar todos los errores que puedan ser producidos
(cualquier codigo de estado que sea un error. 404, 500, 204, 301....
etc.) y además mostrar sugerencias en base al "modulo" y/o "acción"
desde donde se ha producido dicho error.

También me gustaría poder indicar la redirección mediante el archivo
"setting.yml" de la aplicación, algo como esto:

Código:
    error_404_module: comunes 
    error_404_action: errores 
    error_500_module: comunes 
    error_500_action: errores 
    error_204_module: comunes 
    error_204_action: errores 
    error_301_module: comunes 
    error_301_action: errores 
    ........
Dentro del directorio "app/frontend/modules/comunes" en el archivo
"action.class.php" defino "executeErrores" en el cual he de recibir el
código de estado que se ha producido y el módulo desde donde se
produjo el error o excepción para así, conseguir mostrar el partial
"app/frontend/modules/comunes/templates/_errorXXXSuccess.php" y el
partial de la sugerencia que busco y extraigo del módulo "referer"
donde se ha producido el error.

Pues bién, esa es la idea, contenido dinámico para diferentes tipos de
Error en diferentes circunstancias y funcionando perfectamente con los
códigos de tipo 404 pero no con el resto...

He leido que podría situarme en medio del evento creando unos archivos
"config/error.html.php" y "config/exception.html.php". Efectivamente
si produzco por ejemplo y manualmente un error 500 esos archivos son
ejecutados. El problema está en que desde ahí no puedo acceder a las
variables de symfony. Porque de ser así yo podría invocar a "comunes/
errores" y a las malas enviarle como parámetros el código de estado
del error y el módulo donde se ha producido, pero no es así. Desde ahí
lo más que puedo hacer es jugar con $_SERVER y el Routing.yml pero no
consigo buenos resultados ya que se mezcla el entorno de Producción
con Desarrollo (/frontend_dev.php) y es algo que también quiero
evitar.

Es decir, quiero conseguir lo mismo que en "setting.yml" hace
"error_404_module" y "error_404_action" pero con otros códigos de
error. Permitiéndome así mostrar mis páginas personalizadas en
producción en función de "error o excepción" y/o "módulo o acción"
donde se haya lanzado el error desde Producción, y en caso de estar en
modo de Desarrollo (/frontend_dev.php/....), mostrar el Dispatch de
Symfony.

Seguramente esté complicandome la vida y haya alguna forma más
sencilla de hacer lo que busco pero tras hacer miles de combinaciones
no consigo el resultado adecuado. Incluso quizás si Symfony no permite
redireccionar otros tipos de error desde "setting.yml" es porque se
los reserva para él o algo por el estilo. No lo entiendo.

Ruego me ayuden por favor ya que tampoco encuentro documentación al
respecto y seguro que por aquí al menos lo dejamos público para otras
personas que quieras hacer algo parecido.


Muchísimas Gracias y Un Saludo!
  #2 (permalink)  
Antiguo 08/04/2012, 00:28
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: Personalizar Todos los Errores de Symfony 1.4

Lo que estás haciendo es correcto, veo muy difícil que frente a un error del servidor puedas acceder a las variables de php ya que justamente de eso se trata el estado de "error". El tema de personalizar mensajes de error está bien documentando en los tutoriales de Symfony. Si aún no te funciona como quieres te recomiendo postees en un foro especializado, saludos!
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 09/04/2012, 01:09
Avatar de Z3R0N3  
Fecha de Ingreso: junio-2010
Ubicación: En algún lugar de la mancha de cuyo nombre no quiero acordarme...
Mensajes: 73
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: Personalizar Todos los Errores de Symfony 1.4

Hola repara2, ante todo gracias por responder ;)

En las guías de symfony hace mención a los archivos "config/error.html.php" y "config/exception.html.php" como edición de errores 404 y 500, pero no de otros tipos de error del server.

Supongo que será dificil ponerse en medio del code para captar ese error y mostrar la sugerencia en base a la acción, error y resultado final.

Seguiré escuchando respuestas y sugerencias haber si tengo suerte ;)


PD: en cuanto a los foros especializados... sé que hay algún grupo de google enfocado a symfony, también puse este post allí haber si tenemos suerte... ¿Se me recomienda alguno? Thx!
  #4 (permalink)  
Antiguo 09/04/2012, 02:15
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: Personalizar Todos los Errores de Symfony 1.4

No te recomiendo ningún foro porque para mí son todos malos, igual que la documentación de Symfony. En general, todos los problemas los he resuelto leyendo la página stackoverflow. Saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #5 (permalink)  
Antiguo 09/04/2012, 02:45
Avatar de Z3R0N3  
Fecha de Ingreso: junio-2010
Ubicación: En algún lugar de la mancha de cuyo nombre no quiero acordarme...
Mensajes: 73
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: Personalizar Todos los Errores de Symfony 1.4

Me he pasado por donde me dices para propagar éste problema haber si tengo suerte ;)

Mientras tanto esperaré haber si alguien con seguro más experiencia que yo sabría aproximarse a la idea de aplicar esa modularidad en los errores. Me veo montándome una expresion regular en base a la URI dada jeje al menos para el problema de separar producción y desarrollo.

(Con la URI también he tenido que montar el "slot de componente" para extraer la sugerencia del módulo en concreto donde ha cascado y así mostrarlo.)

El problema está en el Error como tal que obviamente no consigo capturarlo. Quizás incluso symfony no deja personalizar más allá del 404 o 500 por alguna razón en concreto como por ejemplo que todas las salidas de errores se simplifiquen en un 404 o 500. O incluso deje estos errores bajo omisión del .htaccess o el propio server o... nose jeje


Gracias repara2 :D
  #6 (permalink)  
Antiguo 09/04/2012, 10:03
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Personalizar Todos los Errores de Symfony 1.4

Que tal Z3R0N3,

He utilizado muy poco Symfony 1.x pero teniendo en cuenta lo que es un error 500 o 404 en el fw (no es mas que una excepción), generar mas errores debería ser tan sencillo como extender una clase, te sugiero que le des un vistazo a la clase sfError404Exception, con setear el status code correspondiente y guardar en config el module y action debería ser suficiente.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 10/04/2012, 00:57
Avatar de Z3R0N3  
Fecha de Ingreso: junio-2010
Ubicación: En algún lugar de la mancha de cuyo nombre no quiero acordarme...
Mensajes: 73
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: Personalizar Todos los Errores de Symfony 1.4

Qué tal masterpuppet? Gracias por responder ;)

Nose si he entendido bien lo que planteas, ¿te refieres a por ejemplo crear un archivo "sfError301Exception.class.php" dentro del kernel de Symfony para desde ahí setear el código de estado? para luego desde el proyecto configurarlo en Setting.yml y redireccionar a mi "module/action"??

De ser así... hasta estaría genial!! jajajaj me falta plasmarlo y supongo que tendría que programarme yo mismo las clases de esos "status codes".... ¿sugerencias para empezar?

Gracias equipo ;)
  #8 (permalink)  
Antiguo 10/04/2012, 04:26
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Personalizar Todos los Errores de Symfony 1.4

A ver, las excepciones deberían ir en lib/exception, por ejemplo un error 403(Forbidden) podría ser algo así:

lib/exceptions/Error403Exception.class.php
Código PHP:
Ver original
  1. class Error403Exception extends sfException
  2. {
  3.    /**
  4.     * Forwards to the 403 action.
  5.     */
  6.     public function printStackTrace()
  7.     {
  8.         $exception = null === $this->wrappedException ? $this : $this->wrappedException;
  9.  
  10.         if (sfConfig::get('sf_debug')) {
  11.             $response = sfContext::getInstance()->getResponse();
  12.             if (null === $response) {
  13.                 $response = new sfWebResponse(sfContext::getInstance()->getEventDispatcher());
  14.                 sfContext::getInstance()->setResponse($response);
  15.             }
  16.             $response->setStatusCode(403);
  17.             return parent::printStackTrace();
  18.         } else {
  19.             // log all exceptions in php log
  20.             if (!sfConfig::get('sf_test')) {
  21.                 error_log($this->getMessage());
  22.             }
  23.             sfContext::getInstance()->getController()
  24.                                     ->forward(
  25.                                         sfConfig::get('sf_error_403_module'),
  26.                                         sfConfig::get('sf_error_403_action'));
  27.         }
  28.     }
  29. }

some controller
Código PHP:
Ver original
  1. public function executeIndex(sfWebRequest $request)
  2. {
  3.     ...
  4.     if(!$acl->isAllowed(...)){
  5.         throw new Error403Exception();
  6.     }
  7.     ...
  8. }

Te sugiero que para la proxima postes en el foro adecuado FW's y OOP

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 10/04/2012, 08:28
Avatar de Z3R0N3  
Fecha de Ingreso: junio-2010
Ubicación: En algún lugar de la mancha de cuyo nombre no quiero acordarme...
Mensajes: 73
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: Personalizar Todos los Errores de Symfony 1.4

Perdón si alguien pudiera mover el tema al sitio adecuado... lo siento.

y Genial, ya entiendo lo que me quieres decir... es muy buena idea y de ser así estaría genial... esta noche saco un moment, pruebo y cuento ;)

Lo que no sé es en qué momento Symfony advierte que se ha producido una excepción y de qué tipo, es decir, si yo no realizo el "throw303" para provocar la excepción, pero si la provoco inyectando un valor en la URL o algo por el estilo que provocara otro error que no sea 404 o 500... en ese momento ¿cómo Symfony sabría si realmente se trata de un 303 y no un 404 o 500 estáticos de él?

Supongo que para averiguarlo debería revisar todo el code de sfException y sacar mis propias conclusiones para saber cómo tratarlo y así programar cada clase de código de estado por separado. Supongo que también éstas clases tendrían sus peculiaridades en el codigo para saber diferenciarse entre sí... en fin, lios... jejje


Gracias chic@s os voy y nos vamos contando ;) gracias
  #10 (permalink)  
Antiguo 10/04/2012, 16:23
Avatar de Z3R0N3  
Fecha de Ingreso: junio-2010
Ubicación: En algún lugar de la mancha de cuyo nombre no quiero acordarme...
Mensajes: 73
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: Personalizar Todos los Errores de Symfony 1.4

Hola buenas, os voy contando ;)

He probado a generar unos archivos de diferentes formas... dentro del kernel de symfony (del instalador) en "/lib/exception/" generando archivos con nombres "sfError500Exception.class.php" y "Error500Exception.class.php" también modificando el código interno pero... desde ahí no reproduce nada fuera de lo que no haya antes (como si no existieran).

Lo mismo pero a nivel de Proyecto en "/lib/exception" y en "apps/frontend/lib/exception" y más de lo mismo.

Lo que si me cogen son los archivos "/error/error.html.php" y "/error/exception.html.php" pero como ya sabemos, ahí no puedo usar las variables de Symfony.

No me gustaría tocar el kernel o la instalación de Symfony pero creo que los tiros van a empezar por ahí. Como el error 404 está bien implementado en symfony, no tengo problemas pero con el resto... bff jajaja

Realmente lo que pretendo es que el module/action cuando se produzca un error siempre vaya a ser el mismo (apps/frontend/modules/comunes/errores), sino que éste será el que deba trabajar el código de estado para así mostrar el error que corresponda y a su vez sugerencias ;)


Si se os ocurre algo... soy todo oidos! gracias!
  #11 (permalink)  
Antiguo 10/04/2012, 17:56
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Personalizar Todos los Errores de Symfony 1.4

Tanto el error 404 como el 500 son excepciones que lanza el fw y luego procesa(seatea los headers correspondientes para un correcto uso del protocolo http), si tu quieres seguir la misma linea y para por ejemplo un error de autorización generar un 401, tienes que crear la excepción y lanzarla como te indique en el post anterior.
Ahora si lo que quieres es manejar los errores que devuelve Apache ya no es algo que tenga que ver con el fw y deberias buscar info sobre ErrorDocument.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #12 (permalink)  
Antiguo 11/04/2012, 04:02
Avatar de Z3R0N3  
Fecha de Ingreso: junio-2010
Ubicación: En algún lugar de la mancha de cuyo nombre no quiero acordarme...
Mensajes: 73
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: Personalizar Todos los Errores de Symfony 1.4

Hola masterpuppet ;)

También probé lo que me comentaste y siguió lanzándome la excepción 500 de symfony, no redireccionaba al modulo/action ni nada por el estilo, es decir, como si no hubiera echo nada jeje.

En cuanto a lo que me comentas de ErrorDocument tenía pensado indicarlo en el .htaccess que viene en el proyecto y poner algo así:

Código:
ErrorDocument 500 /comunes/errores/500
o bien

Código:
ErrorDocument 500 /comunes/errores?id=500

Así poder capturar el codigo de estado y mostrar la salida del modulo/action pero seguía en las mismas, mostrando la excepción de symfony, como si no hiciera nada.... además siempre que hago un cambio llamo a la tarea "symfony project:permission" y "symfony cc" además de recargar la página con CTRL+F5 varias veces para asegurarme que no se muestra lo cacheado en el navegador, incluso hay veces hasta que reinicio apache por si acaso... jeje

nosenose... bff

Etiquetas: errores, html, personalizar, variables
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 09:30.