Por estos días estoy en training total de Zend Framework, la verdad un framework muy flexible, con una gama de clases bastante buenas que permiten agilizar nuestro tiempo de desarrollo (ojo eso si dominamos dicho framework, no demora mucho tiempo dominarlo).
En fin anteriormente he utilizado CakePHP, otro framework que me gusta bastante, pero que aunque más fácil de usar, diría a mi concepto es menos flexible que el framework de Zend.
Para ir al asunto, hay varias funciones de cakephp que me gustan mucho, entre ellas la que utilizamos en el controlador para guardar mensajes y mostrarlos aunque se haga un redirect ($this->Session->setFlash). Por ejemplo si tenemos un módulo de noticias y guardamos una noticias, pero redirigimos a la página donde se listan las noticias y no al formulario para agregarla, tenemos que hacer un redirect ($this->_redirect('/')), o sea, que si queremos mostrar un mensaje no podríamos hacerlo (que yo cepa, me imagino que alguna otra forma habrá).
Para eso cree un controlador base (BaseController.ph) que hereda de Zend_Controller_Action. En el agregúe dos funciones,
setFlash para setear el mensaje y
getFlash para obtener dicho mensaje (Si quieres que funcione para cualquier controlador entonces debes heredar de esta clase los controladores). Estas funciones utilizan una variable de sesión por lo que en el bootstrap (index.php) debemos abrir la sesión así:
Zend_Loader::loadClass(
'Zend_Session');
Zend_Loader::loadClass(
'Zend_Session_Namespace');
/** * Abro la sesión */Zend_Session::start();
---------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------
Ahora les dejo con el código del controlador base (BaseController.php)
/**
* BaseController * * @author * @version */require_once 'Zend/Controller/Action.php';class BaseController extends Zend_Controller_Action { /** * The default action - show the home page */
public function init() { $this->initView(); $this->view->siteInfo = Zend_Registry::get('siteInfo'); $translate = Zend_Registry::get('translate'); $this->view->declareVars(array('t' => $translate)); }
public function postDispatch(){
$this->view->danmessage = $this->getFlash();
}
public function baseUrl() { $fc = Zend_Controller_Front::getInstance(); $request = $fc->getRequest(); return $request->getBaseUrl(); } public function setFlash($msg = ''){ $danmsg = new Zend_Session_Namespace('dan.message'); $danmsg->mensaje = $msg; } public function getFlash(){ $r = new Zend_Session_Namespace('dan.message'); $return = $r->mensaje; $r->mensaje = null; return $return; }}---------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------
Ahora en mi caso estoy usando la clase Zend_Layout, por lo que uso un template. Para colocar este mensaje en tu template solo debes imprimirlo donde desees. Solo debes utilizar esto:
<?=$this->danmessage ?>