Zend在动作之间传递变量?

时间:2011-01-28 18:02:09

标签: zend-framework controller action parameter-passing

我不确定如何执行此操作:添加muy'add'操作后,我想将用户发送到我的'view'操作,以便他们可以看到提交的行。但看到它刚刚提交,我想向用户显示他们的数据已提交的成功消息。

我以这种方式显示我的行:url.com/view/32

如果他们刚刚提交了某些内容,我只想展示成功消息,而不仅仅是在他们只是在阅读数据时。

所以我想将$submitted = true之类的内容传递给我的视图Action,但我不知道如何做到这一点。有什么建议吗?

另外,我想到的另一种方法是检查访问者是否来自我的添加操作,如果是,则显示成功消息。再说一次,不知道如何做到这一点......

5 个答案:

答案 0 :(得分:3)

flashMessenger动作帮助程序用于在下一个请求中显示消息。

它使用会话来存储信息。

答案 1 :(得分:1)

在研究了Zend在这里和其他地方的几个问题之后 我得出结论,没有一步一步的列表回答zend问题 真的很糟糕 所以在这里:

在您的form.html中:

<input type="text" name="field[input1]" id="input1" />
<input type="text" name="field[input2]" id="input2" />
你的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");
        }
    }
在你的view.phtml中

<?php echo $this->msg ?>

btw $this->myDB->add($fields)是您对db

的插入语句的位置

答案 2 :(得分:0)

您可以在addAction()成功时简单地渲染视图:

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

所以在persudeo:

的addAction():

  • 如果请求不是POST,则显示空白添加表单。
  • 如果页面是POST,但表单无效,则重新显示表单。
  • 如果页面是POST,则表单有效,呈现视图。

您需要将所有内容传递给您为viewAction()执行的查看脚本,但您也可以传递一条消息,该消息现在将转到视图脚本。

在你的view.phtml中只需使用php snipet来测试if (isset($this->message))echo "Data Added....";这种方式当你使用普通的viewAction()时它不会显示消息。这将使用户处于addAction()网址。

如果您想将用户移至其他网址see the answeer here

答案 3 :(得分:0)

您可以通过会话变量发送数据(您可以使用Zend_Session来处理)。当您到达视图时,检查会话变量是否已设置,如果是,则显示消息并使变量无效。这样,如果用户刷新页面,则不再显示该消息(这不是url params的情况,将再次显示该消息)。如果未设置,则只是不显示消息。

我使用此系统在登录屏幕上显示一条消息,如果未登录的用户尝试访问安全部分且效果很好

答案 4 :(得分:0)

尝试这样的事情::

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

现在,成功参数传递给viewAction(),就像它在URL中一样,因此您可以在控制器和视图中访问它。祝你好运!