Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

como hacer un _redirect

Estas en el tema de como hacer un _redirect en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos, tengo un menu en el index de la carpeta index, este menu me direcciona al controller cliente y el action listar pero ...
  #1 (permalink)  
Antiguo 01/12/2010, 23:57
Avatar de alfcm  
Fecha de Ingreso: mayo-2009
Mensajes: 291
Antigüedad: 14 años, 10 meses
Puntos: 7
como hacer un _redirect

Hola a todos,
tengo un menu en el index de la carpeta index, este menu me direcciona al controller cliente y el action listar

pero como tengo un if preguntando por la session , si la sesion esta en 0 este deberia quedarse en la misma pagina donde esta mi menu , pero siempre me lanza al listado (obviamente con datos vacios ya q la sesion esta en 0)

Como podria hacer para que se quede en el menu y no se direccione al listado (vacio)?

Muchas gracias de antemano

Código PHP:
class ClienteController extends Zend_Controller_Action{

 public function 
listarAction(){
               
$misession = new Zend_Session_Namespace('sesion_usuario');
        if(
$misession->conectado == 1){
                
// aqui obvie mi codigo para armar la structura del json
            
$this->_helper->json($response);
        }else{
            
$this->_redirect('index/index.phtml'); // esto no me funciona
            
        
}

el metodo listar lo llamo al cargar el index de la carpeta cliente con ajax
  #2 (permalink)  
Antiguo 02/12/2010, 04:14
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: como hacer un _redirect

puedes hacer un if con session == 0 o mejor, comprobar si la session existe, if isset creo.

Un saludo!
  #3 (permalink)  
Antiguo 02/12/2010, 07:23
 
Fecha de Ingreso: febrero-2009
Mensajes: 218
Antigüedad: 15 años, 1 mes
Puntos: 9
Respuesta: como hacer un _redirect

Cita:
$this->_redirect('index/index.phtml'); // esto no me funciona
No te funciona porque las redirecciones se hacen apuntando a los actions, no a las vistas, sacale el ".phtml" y tendría que funcionar.
  #4 (permalink)  
Antiguo 02/12/2010, 08:21
Avatar de alfcm  
Fecha de Ingreso: mayo-2009
Mensajes: 291
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: como hacer un _redirect

hola fernando, si ya hice de todo le puse ('/') tambien probe poniendo ('/index') y nada.

OJO ,con las sesiones no tengo problema miktrv

Última edición por alfcm; 02/12/2010 a las 08:36
  #5 (permalink)  
Antiguo 02/12/2010, 09:27
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: como hacer un _redirect

Porque no debugeas el helper para ver que es lo que esta fallando, ya que

Código PHP:
Ver original
  1. $this->_redirect('index');

no es mas que un shortcut a gotoUrl de redirector.
  #6 (permalink)  
Antiguo 02/12/2010, 09:41
Avatar de alfcm  
Fecha de Ingreso: mayo-2009
Mensajes: 291
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: como hacer un _redirect

hola masterpuppet, recien estoy entrando a lo de Zend y aplicando jquery ( con mi libreria jqGrid) , no se a que te refieres con el helper. disculpa mi ignorancia
  #7 (permalink)  
Antiguo 02/12/2010, 09:43
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: como hacer un _redirect

Hola

Eso tienes que hacerlo antes de que llegue a la acción para eso existe un método llamado predispatch que se ejecuta antes de cualquier acción, este método debes implementarlo en el controlador (ClienteController ), y es ahí donde debes comparar el valor de la sesión y redireccionar de ser necesario.

Saludos
  #8 (permalink)  
Antiguo 02/12/2010, 09:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: como hacer un _redirect

El problema es que tu estas llamando la acción por ajax, y el redirect no te va a servir de nada ya que tienes tu que hacer el redirect en javascript.

Saludos.
  #9 (permalink)  
Antiguo 02/12/2010, 10:03
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: como hacer un _redirect

Zend tiene action helpers y view helpers, en la documentacion esta claro sobre que son y como usarlos, el metodo _redirect es un proxy a un action helper, en este caso Zend_Controller_Action_Helper_Redirector::gotoUrl.

Seguramente el problema es lo que dice GatorV, deberias evaluar la respuesta del request con JQuery y segun sea el caso redirigir.

@Fenris: en realidad lo puede hacer tanto en el action como en el preDispatch.
  #10 (permalink)  
Antiguo 02/12/2010, 10:14
Avatar de alfcm  
Fecha de Ingreso: mayo-2009
Mensajes: 291
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: como hacer un _redirect

Hola GatorV, intente haciendo en un comienzo esto, hacer un echo inscrutando codigo javascript, pero no funciono no se porque

Código PHP:
 if($misession->conectado == 1){
                
// aqui obvie mi codigo para armar la structura del json
      
$this->_helper->json($response);
}else{
         
     echo 
"<script>location.href='http://localhost/ventas/public/index'</script>";
            

Vere la forma de enviar un estado y ya en mi archivo JS hare el location.href
  #11 (permalink)  
Antiguo 02/12/2010, 11:14
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: como hacer un _redirect

alfcm, deberias asignarle un error a response

Código PHP:
Ver original
  1. ...
  2. $response = new stdClass();
  3. if ($misession->conectado == 1) {
  4.     ...
  5.     $response->page    = $page;
  6.     $response->total   = $total_pages;
  7.     $response->records = $count;
  8.     ...
  9. } else {        
  10.    $response->error = 'KO';  
  11.    $response->message = 'Not logged in!';
  12. }
  13.  
  14. $this->_helper->json($response);

y en tu js evaluarlo:

Código Javascript:
Ver original
  1. jQuery("#identifier").jqGrid({
  2.     ...
  3.     loadComplete: function(data){
  4.         if(data.error){
  5.             location.href='http://localhost/ventas/public/index'
  6.         }
  7.     }
  8.     ...
  9. });

Salu2.
  #12 (permalink)  
Antiguo 02/12/2010, 14:35
Avatar de alfcm  
Fecha de Ingreso: mayo-2009
Mensajes: 291
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: como hacer un _redirect

eso hice tambien masterpuppet pero, el efecto es que carga la pagina de listado vacia y luego vuelve al index, lo que voy a hacer es verificar solamente la sesion por separado en un action por ejemplo sesionAction y luego en base a la respuesta cargo mi grid

$.ajax(
{
url:'http://localhost/ventas/public/cliente/sesion',
type:'POST',
success:function(datos){
if(datos == 'OK')
{
cargarGrid();
}else{
location.href='http://localhost/pruebajax/public/index';
}
}
}
);

voy a probar y les cuento
  #13 (permalink)  
Antiguo 02/12/2010, 15:41
Avatar de alfcm  
Fecha de Ingreso: mayo-2009
Mensajes: 291
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: como hacer un _redirect

Gracias a todos por ayudarme, logre resolver ,aunque hice un cambio pequeño, haber si le sirve a alguien que tenga el mismo problema

en mi index tengo un link lClientes el cual en codigo html era

Código PHP:
<li><a href="<?php echo $this->url(array('controller'=>'cliente','action'=>'index'),''true?>">Clientes</a></li>

pues lo cambie ya que no me funcionaba como queria, e hice lo siguiente

<li><a href="#" onclick="rutear()">Clientes</a></li>

y en mi funcion rutear esta lo sgte:

Código PHP:
function rutear(){
    $.
ajax(
            {
                
url:'http://localhost/pruebajax/public/cliente/sesion',
                
type:'POST',
                
dataType:'json',
                
success:function(datos){
                
alert(datos.conec);
                    if(
datos.conec == 'OK')
                    {
                        
location.href='http://localhost/pruebajax/public/cliente';
                    }else{
                        
location.href='http://localhost/pruebajax/public/index';    
                    }    
                }
            }    
        );
}

y en mi controller cliente cree un sesionAction y contiene lo sgte

public function sesionAction(){
        
            
$misession = new Zend_Session_Namespace('sesion_usuario');
            
            if(
$misession->conectado == 1){
                
$response->conec 'OK';
                
            }else{
                
$response->conec 'NO';
            }    
        
$this->_helper->json($response);
    } 
bueno eso es todo, creo que se entiende

Saludos
  #14 (permalink)  
Antiguo 02/12/2010, 15:42
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: como hacer un _redirect

Ese efecto es porque con el loadComplete interceptas muy tarde la respuesta, lo ideal seria acceder a ella antes del success, ahi evaluar y pasarle los datos a success o redirigir,
creo que lo podes hacer asi:

Código Javascript:
Ver original
  1. jQuery("#identifier").jqGrid({
  2.     ...
  3.     ajaxOptions: {
  4.         dataFilter: function(data, type) {
  5.             if (type == "json") {
  6.                 parsed = jQuery.parseJSON(data);
  7.                 if (parsed.error) {
  8.                     location.href='gotourl';
  9.                 }
  10.             }            
  11.             return data;
  12.         }
  13.     }
  14.     ...
  15. });

Salu2.
  #15 (permalink)  
Antiguo 02/12/2010, 15:47
Avatar de alfcm  
Fecha de Ingreso: mayo-2009
Mensajes: 291
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: como hacer un _redirect

Eso no sabia q se podia hacer en jqgrid, bueno hare la prueba como me dices masterpuppet aunque ya funciono de algun modo, pero mientras a menos codigo mucho mejor
  #16 (permalink)  
Antiguo 02/12/2010, 16:37
Avatar de alfcm  
Fecha de Ingreso: mayo-2009
Mensajes: 291
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: como hacer un _redirect

Hice la prueba con el ajaxOptions, pero no entra ni a la funcion, probe tambien con beforeSend y nada

ajaxOptions: {
dataFilter: function(data, type) {
alert('entro a la funcion');
}
}

Pero de todas maneras gracias a todos, estoy muy agradecido
Saludos

Etiquetas: redirect
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 17:59.