Welcome Guest, Not a member yet? Register   Sign In
redirect detiene hook en post_controller
#1

Buen día foro, ante todo agradecer de ante mano su ayuda, mi problema es el siguiente,

Tengo configurado un hook que guarda un log de queries sql en un archivo, este hook se ejecuta cuando el controlador ha terminado su funcionamiento ya que se encuentra configurado como post_controller, funciona de maravilla hasta que utilizo el redirect en algún controlador, es ahí en donde el controlador no culmina su ejecución y por ende no se ejecuta el hook.

Alguna solución?

Saludos
Reply
#2

Hola y bienvenido al foro.

Me ha sucedido lo semejante, y lamentablemente, creo que no hay solución porque el redirect inmediatamente termina la ejecución del programa sin darle ni al hook ni a ninguna otra cosa la oportunidad de correr. Como lo entiendo, es cosa del diseño "server-side" de PHP. Aún cuando no usaras el redirect de CodeIgniter sino en cambio la función header() de PHP, te encontrarías con lo mismo.

Me imagino que podrías no usar el hook cuando necesitas hacer un redirect, pero entonces tendrías que quardar el log de queries antes de hacer el redirect. Claro, entiendo que la onda de usar el hook es precisamente el no tener que hacer eso. No se si se podría hacer con JavaScript, pero eso también sería añadir más complicación.
Hey, don't work without a PHP debugger. Several free IDEs have this features built in. Two are NetBeans and CodeLobster. Without a debugger, it's like you're driving with a blindfold on -- you are going to crash!
Reply
#3

Gracias por la bienvenida y la respuesta RobertSF

Lamentablemente ese hook tiene que correr al finalizar la ejecución del controlador para poder tener la certeza que se guarden todas las queries ejecutadas.

Como dices, hacer que guarde de manera manual el log no es la idea, justo para eso está ese hook.

Se me ocurrió una solución (temporal hasta que la encuentre) que quiero compartirla para quienes tengan el mismo inconveniente, de igual manera si alguien tiene la solución estaré muy agradecido.

En el controlador en lugar de hacer el redirect:

PHP Code:
$datos['mensaje'] = 'Mensaje';
$datos['url'] = base_url().'destino_a_redireccionar';
$this->load->view('redirect'$datos); 


Adicional a eso cree una vista llamada redirect.php que contiene:

PHP Code:
<?php
if ($this->session->flashdata('mensaje') !== '') {
    $this->session->set_flashdata('mensaje'$mensaje);
}
header('Location: '.$url); 


El arreglo $datos y flashdata como para poder pasar parámetros a la redirección.

Así el controlador termina su ejecución y corre el hook.

Espero sus comentarios del código.

Saludos
Reply
#4

No se me había ocurrido hacerlo así, pero me parece buena solución. Y tal vez sea la solución permanente porque decir header es como decir exit. Ahí termina todo.

No creo que ésta sección del foro sea muy visitada, así que si quieres, puedo traducir tu pregunta y ponerla en la sección del Inglés para ver si hay más opiniones o sugerencias sobre esto.
Hey, don't work without a PHP debugger. Several free IDEs have this features built in. Two are NetBeans and CodeLobster. Without a debugger, it's like you're driving with a blindfold on -- you are going to crash!
Reply
#5

Sería buenísimo, muchas gracias.

Saludos
Reply




Theme © iAndrew 2016 - Forum software by © MyBB