2011-01-28 6 views
1

Je ne suis pas sûr de savoir comment faire: Une fois qu'une ligne est ajoutée avec l'action muy 'add', je veux envoyer l'utilisateur à mon action 'view' afin qu'ils puissent voir la ligne qui a été soumise. Mais comme il vient d'être soumis, je veux montrer à l'utilisateur un message de réussite que leurs données ont été soumises.Zend passant des variables entre les actions?

je montre mes lignes de cette façon: url.com/view/32

Je veux seulement montrer le message de succés s'ils ont juste soumis quelque chose, pas quand ils lisent uniquement des données.

Donc je veux passer quelque chose comme $submitted = true à mon avis Action, mais je ne sais pas comment faire cela. Aucune suggestion?

Aussi, une autre façon de penser, était de vérifier si le visiteur venait de mon action d'ajout, et si oui, montrer le message de réussite. Encore une fois, pas sûr comment faire si ...

Répondre

4

L'aide d'action flashMessenger est conçu pour afficher des messages dans la prochaine demande.

Il utilise la session pour stocker les informations.

+0

+1 pour flashMessenger, j'avais presque oublié à ce sujet, probablement parfait pour cette situation, définir un message, puis rediriger l'utilisateur à viewAction et vérifier et afficher le message. – Scoobler

1

Vous pouvez simplement rendre la vue lorsque le addAction() réussit:

return $this->render('view'); 

Ainsi, dans persudeo:

addAction():

  • Si la requête n'est pas un POST, affichez un formulaire d'ajout vide.
  • Si la page est un POST, mais que le formulaire n'est pas valide, affichez à nouveau le formulaire.
  • Si la page est un POST, le formulaire était valide, affichez la vue.

Vous devrez passer tout au script de vue que vous faites pour votre viewAction(), mais vous pouvez aussi passer un message, qui va maintenant se rendre au script de vue.

Dans votre view.phtml, utilisez simplement un snipet php pour tester if (isset($this->message))echo "Data Added...."; De cette façon, lorsque vous utiliserez le viewAction() normal, aucun message ne s'affichera. Cela laissera l'utilisateur à l'adresse URL addAction() cependant.

Si vous voulez déplacer l'utilisateur vers une autre URL see the answeer here

+0

mais simplement de rendre la vue ne fonctionnera pas sans les données qui sont envoyées à la vue à travers mon viewAction(). Et je veux envoyer l'utilisateur à une nouvelle URL, mais je préfèrerais ne pas montrer mes données dans l'URL – networkprofile

+0

Vous n'auriez pas passé vos données dans l'URL, transmettez simplement une variable success = true. Votre action de vue traiterait de l'obtention des nouvelles données, il vous suffit de vérifier un paramètre de succès et s'il y a un message dans la vue. Vous avez raison si vous avez rendu la vue que vous devez générer les données à partir de l'affichage. – Scoobler

1

Vous pouvez envoyer les données par une variable de session (vous pouvez utiliser Zend_Session pour gérer cela). Lorsque vous atteignez votre vue, vous vérifiez si la variable de session est définie, si c'est le cas, vous affichez le message et annulez la variable. De cette façon, si l'utilisateur actualise la page, le message ne s'affiche plus (ce qui n'est pas le cas des paramètres url, le message s'affichera à nouveau). Si ce n'est pas le cas, il vous suffit d'afficher le message.

J'ai utilisé ce système pour afficher un message sur l'écran de connexion si un utilisateur non connecté tente d'accéder à une section sécurisée et il fonctionne très bien

+0

Oui, je fais de même pour restreindre les utilisateurs des pages "invité", mais je pensais qu'il y aurait un autre moyen de le faire. Devinez pas, je le ferai avec des sessions .. merci! – networkprofile

1

essayer quelque chose comme ceci ::

if ($this->getRequest()->isPost()) { 
     if ($form->isValid($_POST)) { 
      $data = $form->getValues(); 
      $M = new Model_Xyz(); 
      $M->insert($data); 
      //now the magic, pass success param to to the viewAction() 
      return $this->_forward('view', null, null, array ('success' => 1)); 
     } 
    } 

maintenant le succès est param transmis au viewAction() comme il était dans l'URL, afin que vous puissiez y accéder dans le contrôleur et la vue. Bonne chance!

+0

_forward n'est pas très bon ici, puisque l'actualisation de la page effectuera l'envoi de $ _POST et l'insertion de données à nouveau. Il est préférable de simplement rediriger. – Marcin

1

après des recherches sur Zend plusieurs problèmes ici et d'ailleurs Ive viennent à la conclusion que répondre à des questions zend sans étape par étape la liste fait vraiment chier donc ici il va:

dans votre form.html:

<input type="text" name="field[input1]" id="input1" /> 
<input type="text" name="field[input2]" id="input2" /> 

dans votre controller.php:

public function addAction(){ 
     if ($this->getRequest()->isPost()){   
      $fields= $this->_getParam("field");   
      $this->view->msg = ($this->myDB->add($fields) ? "Add succeeded" : "Add failed"); 
      header("location: http://mysite.com/thepageiwantutogoto"); 
     } 
    } 

dans votre view.pht ml:

<?php echo $this->msg ?> 

BTW $this->myDB->add($fields) est l'endroit où vous avez votre déclaration d'insertion à la DB

Questions connexes