Php 为什么Zend';s的FlashMessenger getMessages方法不工作?
我正在使用Zend 1.12和php 5.4.3,flashMessenger->getMessages()突然停止在控制器操作中工作 在AController中,创建了特定类型的帐户,创建它需要9个步骤,因此我有9个操作create1-9Action 在每一步中,我都使用flashmessenger将表单数据传递到下一步。 这是动作的典型结构:Php 为什么Zend';s的FlashMessenger getMessages方法不工作?,php,zend-framework,Php,Zend Framework,我正在使用Zend 1.12和php 5.4.3,flashMessenger->getMessages()突然停止在控制器操作中工作 在AController中,创建了特定类型的帐户,创建它需要9个步骤,因此我有9个操作create1-9Action 在每一步中,我都使用flashmessenger将表单数据传递到下一步。 这是动作的典型结构: public function create5Action() { $form = new My_Form(); $messages = $t
public function create5Action()
{
$form = new My_Form();
$messages = $this->_helper->flashMessenger->getMessages();
$data = $messages[0];
if ($this->_request->isPost())
{
if ($form->isValid($this->_request->getPost()))
{
/* form treatment */
$this->_helper->flashMessenger->addMessage($data);
$this->_redirect($this->_helper->url("create6", "A", null)); // redirect to next step
}
}
$this->_helper->flashMessenger->addMessage($data);
$this->view->form = $form;
}
在这个操作(create5)中,当从create4Action到达时,数据是完整的,当它作为消息添加到
$this->view->form=$form之前时,数据是完整的代码>,但当我向表单添加新元素并提交它时,$messages=$this->\u helper->flashMessenger->getMessages()
为空,我不知道为什么,因为它适用于所有其他操作。您可能没有在isPost()
循环中添加else
public function create5Action()
{
$form = new My_Form();
$messages = $this->_helper->flashMessenger->getMessages();
$data = $messages[0];
if ($this->_request->isPost())
{
if ($form->isValid($this->_request->getPost()))
{
/* form treatment */
$this->_helper->flashMessenger->addMessage($data);
$this->_redirect($this->_helper->url("create6", "A", null)); // redirect to next step
}
} else {
$this->_helper->flashMessenger->addMessage($data);
$this->view->form = $form;
}
}
但是,这不是flash messenger的预期用途。我认为您的问题的一部分是,每次发出请求时,在调度循环的postDispatch()
部分中,flash messenger命名空间都会被清除
您最好使用自己的实例,而不是依赖flash messenger正在使用的实例
public function create5Action()
{
$session = new Zend_Session_Namespace('data');//set elsewhere and forwarded and can be persistent
$form = new My_Form();
$data = $session->data;
if ($this->_request->isPost())
{
if ($form->isValid($this->_request->getPost()))
{
/* form treatment */
$session->newData = $newData;//forward data if needed, old data will persist as you require
$this->_redirect($this->_helper->url("create6", "A", null)); // redirect to next step
}
} else {
$this->view->form = $form;
}
}
这并不是FlashMessenger的真正用途,您应该创建一个会话名称空间对象,并使用它如何使用FlashM。我从一开始就没有使用名称空间,就是这样,flashmessenger也没有像我想要的那样工作。Zend_会话_名称空间似乎更适合。事实上,我试图添加带有名称空间的消息,但没有效果,我看到了您发布的问题。如果我直接修改$session->data,比如$session->data[“newData”]=$newData
,它会自动修改Zend_session_名称空间中的数据?实际上您会使用它$session->data=''$会话->新数据=“”;$session已引用“data”命名空间。您可以根据需要添加/删除更改密钥。您可以保存字符串、数组或对象。感谢您的帮助。else并不是真正需要的,因为如果请求是post并且表单没有经过验证,我不会做任何事情,实际上它应该处于相同的if条件。如果表单有效,我将重定向到另一个控制器,因此else始终是IFT下的内容通常ZF操作中的工作流将测试ifPost()=true do isValid()else显示表单并接受post事件的数据。isValid()也是如此,我们通常会重新显示表单并在需要时填充它!isValid()。不过,我很高兴你能成功。