paolo@bimodesign.com | +34 608 61 64 10

Framework

        

Zend - Come usare FlashMessenger

In uno stesso controller, ho due action. La seconda ritorna (redirect) alla prima, se c'e' un errore di validazione del form. E fin qui niente di strano. Funziona bene. Solo che io vorrei, mostrare un messaggio all'utente, prima di ritornare alla form/action 1, o anche mostrarlo quando viene aperta la form/action 1 (e' indifferente).
Facendo riferimento ad un ottimo blog che spiega nei dettagli l'argomento http://stackoverflow.com/questions/4730225/correct-way-to-display-errors-when-a-record-cannot-be-found-in-the-database e chiaramente anche alla pagina ufficiale http://framework.zend.com/manual/en/zend.controller.actionhelpers.html, questa e' la soluzione che ho adottato.

Step 01
Assegnare un messaggio al "flash messenger message array"

$this->_helper->flashMessenger->addMessage('You have successfully logged in'); 
$this->_helper->redirector('Action01', 'MioController');

Step 02
Nell'Action01 controllare se il FlashMessenger ha messaggi da visualizzare
if ($this->_helper->FlashMessenger->hasMessages()) {
$this->view->messages = $this->_helper->FlashMessenger->getMessages(); 
}
Step 03
Inserire nella relativa view, un codice del tipo
if (count($this->messages)) : 
    foreach ($this->messages as $message) :
        echo $this->escape($message);
    endforeach;
endif;

E gli step 01 e 02, tradotti nel mio codice sono i seguenti

  public function addsteponeAction() {
        $auth = Zend_Auth::getInstance();
        $dbAdapter = Zend_Db_Table::getDefaultAdapter();
        $form = new Application_Form_ControllerMiostepone();

        $form->submit->setLabel('Save Step 1');
        $this->view->form = $form;

        if ($this->_helper->FlashMessenger->hasMessages()) {
           $this->view->messages = $this->_helper->FlashMessenger->getMessages();
        }

        if ($this->getRequest()->isPost()) {
.... etc... 

public function addsteptwoAction() {
...
verifica se ritornare a step01
...
Se si', allora 
$this->_helper->flashMessenger->addMessage('Error!!!');
$this->_helper->redirector('addStepOne', 'ControllerMio');