2010-05-16 5 views
2

Eh bien,Formulaires et sortie de succès

C'est une question de débutant mais je ne sais vraiment pas quelle est la meilleure façon. J'ai une base CRUD (Créer, Récupérer, Mettre à jour et Supprimer) dans mon projet et je voudrais sortir un message si réussi ou non dans un div dans la même page.

Donc, au fond, j'ai une forme action est définie sur la même page et j'ai un div #statusDiv sous cette même forme que je voudrais quelque chose comme sortie registre inclus avec succès.

Quelle est la meilleure façon de faire cela?

  • Définir un indicateur dans le contrôleur $this->view->flagStatus = 'message' puis l'appeler dans la vue?

Juste pour le rendre plus clair. Il est mon code:

//IndexController.php indexAction() 

... 

//Check if there's submitted data 
if ($this->getRequest()->isPost()) { 
    ... 
    $registries->insert($data); 
    $this->view->flagStatus = 'message'; 
} 

Alors moi:

.... 
<?php if ($this->flagStatus) { ?> 
    <div id="divStatus" class="success span-5" style="display: none;"> 
     <?php echo $this->flagStatus; ?> 
    </div> 
<?php } ?> 
.... 

Répondre

6

Dans cette situation, puisque vous redirigez, le $ this-> view-> flagStatus sera perdu. Au lieu de cela ce que vous devez utiliser est l'assistant d'action flashMessenger:

http://framework.zend.com/manual/en/zend.controller.actionhelpers.html

essentiellement vous l'utiliser comme vous êtes, sauf que vous remplacerions

$this->view->flagStatus = 'message'; 

à

$this->_helper->flashMessenger->addMessage('message'); 

après cela, vous devrez envoyer l'objet flashMessenger à la vue. Vous devez le faire dans un endroit qui est exécuté à chaque requête de page afin que vous pouvez envoyer des messages à une page:

$this->view->flashMessenger = $this->_helper->flashMessenger; 

puis changer votre vue:

<?php if($this->flashMessenger->hasMessages(): ?> 
    <div id="divStatus" class="success span-5" style="display: none;"> 
     <?php $messages = $this->flashMessenger->getMessages(); ?> 
     <?php foreach($messages as $message): ?> 
     <p><?= $message; ?></p> 
     <?php endforeach; ?> 
    </div> 
<?php endif; ?> 

Hope this helps!

+0

ouaish! cela a beaucoup aidé! Merci pour la réponse .. Je viens de faire une erreur, je n'ai pas l'intention de rediriger. Pourtant, est-ce la meilleure façon de faire cela? Comment dois-je le faire sans la redirection? –

+0

Je préfère rediriger après un post de formulaire, car il efface la demande de publication et permet à l'utilisateur d'actualiser la page sans double soumettre le formulaire. Si vous ne vouliez pas rediriger, vous pouvez utiliser la méthode que vous avez décrite, cela devrait fonctionner. – Aaron

+1

Il vous manque une parenthèse fermante dans ' flashMessenger-> hasMessages():?>'. Devrait être ' flashMessenger-> hasMessages()):? > ' – Shoan