manejo de errores

edited marzo 2008 in Dudas/Problemas
Me gustaria saber como se tratan los errores en kumbia... por ejemplo

Si trato de acceder a esta direccion, <!-- m --><a class="postlink" href="http://localhost/kumbia/articulos">http://localhost/kumbia/articulos</a><!-- m --> que obiamente no existe: me devuelve este error...
 KumbiaException&#58; No se encontró el Controlador &quot;restaurantes&quot;
Hubo un problema al cargar el controlador, probablemente el archivo no exista en el directorio de módulos ó exista algun error de sintaxis&#46; Si desconoce la naturaleza de este mensaje consulte con el administrador del sistema
En el archivo /var/www/kumbia/kumbia&#46;php en la línea&#58; 247

#0 /var/www/kumbia/public/index&#46;php(76)&#58; Kumbia&#58;&#58;main()
#1 {main}

Que es muy util mientras estoy desarrollando la aplicacion por que me permite saber que esta bien y que no... pero si desearia hacer que si existe este error, un error 404 (no existe la pagina, en este caso el controlador), me envie a una pagian especifica y no me salga esta pagina de error...

Comentarios

  • edited 7:30
    En la pagina 104 del libro de kumbia 1.3, se comenta acerca de un metodo not_found en el controlador, lo unico es que este solo funciona con acciones en caso de que no existan.

    Espero haberte servido de ayuda.
  • edited 7:30
    Bueno en mi version del libro, esta en la pagina 125, y dice algo asi:
    Este método es llamado siempre y cuando esté definido y permite realizar una acción de
    usuario en caso de que se haga una petición de una acción que no exista en un controlador.
    &lt;?php
    class PruebaController extends ApplicationController {
           function index(){
                $this-&gt;render_text(&quot;Este es el index&quot;);
           }
    
           function not_found($controller, $action){
                Flash&#58;&#58;error(&quot;No esta definida la accion $action, redireccionando a index&#46;&#46;&#46;&quot;);
                return $this-&gt;route_to('action&#58; index');
          }
     }
    ?&gt;
    

    Pero el detalle de este es que funciona al menos por lo que veo, es solo si el controlador no existe y la funcion esta predefinida, pero no funciona si el resultado es simplemente cualquiera...

    Por favor de todas formas podrias ayudarme a saber donde coloar todos los datos y el codigo, en este caso seria dentro de la carpeta controller/prueba_controller.php ????
  • edited 7:30
    Si, claro esta, ese funcionaria solo para ese controlador, si quieres algo mas general colocalo en ApplicationController, para que asi te afecte a todos tus controladores.

    Uno de los problemas que puede presentarse es que intentes acceder a un controlador que no exista, en ese caso la unica manera de personalizar tu mensaje es modificando el codigo del framework mismo al momento en que lanza la excepcion.

    En la version 0.4, entra al archivo kumbia.php en la linea 245, alli se lanza la excepcion.

    Saludos
  • edited 7:30
    Muchas gracias... exactamente eso era lo que necesitaba... por que el como dije a en comienzo, lo que queria es algo como la pagina de error 404, la cual me afecta a todos las paginas no existentes dentro de mi sistema, queria ver como podia manejar un error asi en kumbia, a manera de controlar mas la seguridad de mi sistema...
  • edited 7:30
    Bueno rapidamente con la respuesta del amigo, estuve buscando como hacer lo que deseaba, y consegui esto.. y explico para futuras personas que deseen hacer este mismo proceso...

    Lo primero, antes de leer todo esto, es hace una copia de seguridad de nuestro ficheros, ya que editaremos ficheros que son los usados por el motor del kumbia, y hacer algo mal puede causar problemas en nuestro sistema.

    Si trabajamos en sistemas GNU/Linux, recomiendo hacer lo siguiente
    $ sudo cp /etc/www/mikumbia/kumbia&#46;php /etc/www/mikumbia/kumbia&#46;php&#46;backup
    
    $ sudo cp /etc/www/mikumbia/forms/errors/main&#46;php /etc/www/mikumbia/forms/errors/main&#46;php&#46;backup
    
    Para tener un respaldo ante cualquier eventualidad...

    En el archivo /kumbia.php en la linea 245 conseguimos el siguiente codigo.
    throw new kumbiaException(&quot; No se encontr&amp;oacute; el Controlador \&quot;{$_REQUEST&#91;'controller'&#93;}\&quot;&quot;,
    &quot;Hubo un problema al cargar el controlador, probablemente el archivo no exista en el directorio de m&amp;oacute;dulos &amp;oacute; exista algun error de sintaxis&#46; Si desconoce la naturaleza	de este mensaje consulte con el administrador&#46;&quot;);
    return false;
    

    Donde la primera linea es la que da el "Titulo del error" y el resto la explicacion... Quizas con un poco de creatividad, este mensaje lo podemos modificar, pero tambien nos planteamos que no todo el mensaje esta condicionado por este mensaje, asi que seguimos buscando...

    y de forma casi casual (bueno mas bien intuitiva), llegamos a este fichero.
    /froms/errors/main.php en la linea 136 tenemos la funcion show_message que salta a la hora de de existir un error...

    El codigo es este..
    	public function show_message(){
    		Flash&#58;&#58;error(&quot;
    		&lt;span style='font-size&#58;24px'&gt;KumbiaException&#58; $this-&gt;message&lt;/span&gt;&lt;br/&gt;
    		&lt;div&gt;$this-&gt;extended_message&lt;br&gt;
    		&lt;span style='font-size&#58;12px'&gt;En el archivo &lt;i&gt;{$this-&gt;getFile()}&lt;/i&gt; en la l&amp;iacute;nea&#58; &lt;i&gt;{$this-&gt;getLine()}&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&quot;, true);
    		print &quot;&lt;pre style='border&#58;1px solid #969696; background&#58; #FFFFE8'&gt;&quot;;
    		print $this-&gt;getTraceAsString()&#46;&quot;\n&quot;;
    		print &quot;&lt;/pre&gt;&quot;;
    
    Donde ya podemos modificar ya la apariencia de nuestro mensaje de error... y bueno pues solo bastara algo de creatividad para darle un aspecto profesional... algo importante son las lineas de 140 y 142, que nos dan donde se produjo el error exactamente, esto en la etapa de desarrollo son muy utiles, sin embargo en la etapa publica estos errores no es bueno mostrarlos, asi que en nuestra nueva version en la seccion visible para nosotros estos datos deben ser arrojados durante el desarrollo, pero no olvidar comentar (colocar // antes del codigo) estas lineas para evitar mosrarlas al publico... quizas mas funcionalidades, como atrapar la ip de la persona que causo el error, si es un usuario atrapar el nombre, en fin, las posibilidades son infinitas, pues un poco de creatividad, imaginacion y algo de buen codigo, nos puede dar una pagina de error mucho mas eficiente y visualmente atractiva... saludos a todos los usuarios...
Sign In or Register to comment.