Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/02/2009, 12:16
Drevak
 
Fecha de Ingreso: julio-2008
Mensajes: 24
Antigüedad: 15 años, 9 meses
Puntos: 0
[Zend FW] actionStack y sessiones

Hola, a ver si consigo explicar mi problema:

Tengo un controlador llamador "CategoryController" con una action "list" que nuestra un listado en la parte principal de la pagina.

Este controlador hereda de un "ContentController" hecho por mi implementado tal que:

Código PHP:
class ContentController extends BaseController
{
    
    public function 
preDispatch()
    {        

        
$this->_helper->actionStack('index''locationnav');
        
    }

En el metodo preDispatch añado al actionstack (se supone que es LIFO) una llamada a una acción de otro controlador que me genera el menu.

Dicho menu tiene enlaces que añaden un parametro "locationid" al querystring, si el usuario hace click en un enlace, al volver a cargarse el menu, se obtiene dicho parametro y se carga el menu en función de este. Luego guardo el valor en session para no tener que arrastrarlo en la URL.

Es decir, el controlador del menu hace esto:

Código PHP:

 
public function indexAction()
    {
        
        
$selectedLoc $this->_getParam('locationid'false);
        
        
        
//if no parameter, check session                    
        
if (($selectedLoc == false) && isset($this->_session->locationid))
        {
            
$selectedLoc $this->_session->locationid;
        }

      
//aqui cargo datos, etc....

         
         //Guardamos en session el valor obtenido
         
$session Zend_Registry::get('Zend_Session');
         
         
$session->location $location->GetLocalizedDescription();
                
$session->locationid $location->GetId();
        

         
        
$this->view->location $location;
   
      

 
    } 

De esta forma, al volver a cargar la pagina si no se ha clicado en el menu me lo vuelve a cargar segun el valor guardado en la session.

El problema viene dado a que si obtengo este valor de la session desde el controlador que ha provocado la llamada al preDispatch me vuestra el valor previo y tengo que refrescar o volver a abrir el navegador para que me nuestre el valor correcto.

En resumen: Si llamo a otro controlador en el predispatch y guardo un valor en sessión, luego cuando se ejecuta la "action" del controlador original no veo dicho valor en sessión...



Muchas gracias, y si algo no esta claro lo explico mas detalladamente.