Problema redireccionado "route_to"

edited enero 2011 in Principiantes
Hola a todos nuevamente...

mi duda esta ves es con referencia a los valores que se pasan por la url de KUMBIa, veran tengo ciertos métodos que actualizan el estado de unos registros en mi base de datos, al actualizar el registro y lo redirigo a mi pantallazo inicial que es una lista ordenada de todos los registros con paginación incluida.
function estado($id_dato,$estate)
		{
....
....
if($dato->update())
			{
				Flash::success('Estado del dato Actualizado');
				//Redirecciono a la pagina principal
				return $this->route_to('action: index');
			}
else{
....
}
}

pero en mi pagina inicial que recibe dos parametros por url:
el numero de la pagina y EL estado de los registros a mostrar (Activo - inactivo)
public function index($page=1, $estado="A")
		{
			$_POST['estado']= $estado;
			$_POST['dato'] = $this->Dato->find("conditions: estado='".$estado."'","order: id ASC");
			$_POST['page'] = $page;
		}


esta recibiendo los parametros del metodo de modificacion es decir el ID del dato a modificar y el estado a modificar. y no he podio encontrar como modificar la url que viene del metodo que modifica el estado el cual si necesita el id del dato.

si le coloco

route_to('action: index/1/A'); <-- da Error
route_to('action: index', 'id: 1'); <-- no hace nada pues el id es diferente a mi parámetro page.

lo unico que quiero es eliminar los datos del metodo anterior de mi url y que mi metodo index tome los valores por defecto.

Alguna sugerencia.
muchas Gracias.

Comentarios

  • Pero el route_to donde lo estas colocando?
  • edited 2:00
    pues lo estoy poniendo después que se confirmo que la accion de cambiar el estado actualizo correctamente el registro de la base datos.

    Es decir en mi pagina se selecciona la opción de modificar el estado de un registro este se modifica y si la actualización fue satisfactoria se en ruta a la pagina inicial que muestra todos los registros.
    function estado($id_dato,$estate)
          {
    &#46;&#46;&#46;&#46;
    &#46;&#46;&#46;&#46;
    if($dato-&gt;update())
             {
                Flash&#58;&#58;success('Estado del dato Actualizado');
                //Redireccion a la pagina principal si se actualizo el registro correctamente
               return $this-&gt;route_to('action&#58; index');
             }
    else{
    &#46;&#46;&#46;&#46;
    }
    }
    

    pero esta pagina esta volviendo a recibir los valores por URL del id y el estado a modificar, pues no he podio cambiar la URL que se esta ejecutando.

    lo máximo que he podido hacer a sido redireccionar toda la pagina con la funcion "redirect()" pero si lo hago por esta funcion se me cambia la url lo cual esta bien, pero no se muestran losmensajes de la aplicación pasados por la clase "FLASH"
  • Claro porq el route_to hace un redireccionamiento interno de la aplicacion mas no del url si quieres pasar estos valores debes hacerle un redirect...
  • edited 2:00
    Ok con el redirect cambio toda la direccion de la pagina pero me surge otra dudad, puedo pasarle los mensajes que viene de mi aplicación es decir los que paso como resultado de actualización a traves de la clase FLASH, pues al hacer el redirect estos mensajes no se muestran.
  • eso no se muestran al menos que tu le des un tiempo para redireccionarse si buscan en el libro te das cuenta que ese metodo recibe un parametro que es el tiempo en el cual se ejecutara la redireccion.
  • edited 2:00
    si lo del tiempo tenes razon existe un taimer de tiempo para la redireccion pero pense que habia alguna manera de pasar el mensaje a la nueva pagina sin necesidad de nada mas.

    pero bien muchas gracias por el dato .
  • edited 2:00
    Pues yo tengo el mismo problema, y con redirect, por muy alto que ponga el valor para los segundos, el Flash no se ve, y silo intento con route_to me aparece un error de "missing " para el segundo parámetro.

    ¿No se podría reescribir el métodode route_to para que acepte un número variable de parámetros?
  • edited 2:00
    Te propongo la siguiente solución:

    Invoca al método del controlador y luego efectua un render

    Por ejemplo
    $this-&gt;index(1, 'B');
    $this-&gt;render('index');
    

    Saludos
  • edited 2:00
    emilio, muchas gracias. Así ha funcionado. <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
  • edited 2:00
    tranquilo, para eso estamos <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
  • edited 2:00
    Buenas a todos <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D --> , yo tengo un problema similar con KUMBIA, de echo, no me funcionaba redirect, cuando le pido que tome un tiempo y luego direccione a otro controlador.

    Revise el código y el método de redirect es el siguiente:
    protected function redirect($controller, $seconds=0&#46;5){
    	$config = Config&#58;&#58;read();
    	$seconds*=1000;
    	if(headers_sent()){
    		print &quot;
    			&lt;script type='text/javascript'&gt;
    				window&#46;setTimeout(\&quot;window&#46;location='&quot;&#46;KUMBIA_PATH&#46;&quot;$controller'\&quot;, $seconds);
    			&lt;/script&gt;\n&quot;;
    	} else {
    		print 'header(&quot;Location&#58; &quot;&#46;KUMBIA_PATH&#46;&quot;$controller&quot;)';
    	}
    }
    
    El problema que veo es que necesita que exista un header, sin embargo eso no sucede en mi codigo (no se por que <!-- s:? --><img src="{SMILIES_PATH}/icon_confused.gif" alt=":?" title="Confused" /><!-- s:? --> ), donde hago referencia a un método de mi login_controller.

    Bueno, modifique el código por lo siguiente:
    protected function redirect($controller, $seconds=0){
    	$config = Config&#58;&#58;read();
    	$seconds*=1000;
    	if($seconds &gt; 0){
    		print &quot;
    			&lt;script type='text/javascript'&gt;
    				window&#46;setTimeout(\&quot;window&#46;location='&quot;&#46;KUMBIA_PATH&#46;&quot;$controller'\&quot;, $seconds);
    			&lt;/script&gt;\n&quot;;
    	} else {
    		print 'header(&quot;Location&#58; &quot;&#46;KUMBIA_PATH&#46;&quot;$controller&quot;)';
    	}
    }
    

    El parámetro $seconds=0.5 lo cambio por $seconds=0 y en la comparacion if(headers_sent()) lo cambio por if($seconds > 0), una vez eche este cambio me funciona bien.

    Notas
    • 1ro) Cambio el tiempo de $seconds a cero por que considero que por un tiempo menor o igual a cero siempre debería usar la función header("Location: direccion_url") y solo cuando se use un valor mayor a cero, debería colocarse la función en javascript.

      Por el momento a mi me funciona bien, incluso me permite manejar bien las variables que pasaba por la URL, algo que antes de este cambio no era posible.
      [/*:m]
    • 2do) Modifique el headers_sent por que en mi caso siempre el resultado de ese comando era FALSE.[/*:m][/list:u]

      Datos de mi version de KUMBIA
      • Versión: 0.5 Stable[/*:m]
      • Archivo modificado: library/kumbia/controller/controller.php[/*:m]
      • Método modificado: redirect[/*:m][/list:u]

        VIVA KUMBIA, GRACIAS A LOS QUE HACEN ESTO POSIBLE
  • Hola Gracias por el arreglo, seria bueno que lo colgaras en el BugTracking[1] de KumbiaPHP Framework

    [1]->https://bugs.launchpad.net/kumbia
  • edited 2:00
    El uso de redirect es bastante simple, al igual que el uso de route_to

    hablando con joanhey en el irc encontramos que el uso del codigo que menciona jjvos19 no es recomendable

    aqui esta la manera correcta de como usar redirect y route to
Sign In or Register to comment.