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');
}
}
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.