我正在尝试实现一个插件,用于处理持久性事务成功或失败时对用户的响应。当响应为false时,我使用_forward来执行表单提交的操作并显示我的占位符消息,但是当响应为true时,我使用_redirect进行浏览并显示新记录。
我的问题是,当我使用_redirect时,浏览器不会显示占位符消息。我将在这里显示代码:
/**
* Plugin
*/
class Application_Plugin_PostMessage extends Zend_Controller_Plugin_Abstract
{
public function postDispatch(Zend_Controller_Request_Abstract $request)
{
$message = $request->getParam('message');
$error = $request->getParam('error');
if (null !== $message || null !== $error) {
$layout = Zend_Layout::getMvcInstance();
$view = $layout->getView();
$placeHolder = $view->placeholder('message');
$placeHolder->setPostfix('</div>');
if (null !== $error) {
$placeHolder->setPrefix('<div class="errorMessage">')
->append($error);
}
elseif (null !== $message) {
$placeHolder->setPrefix('<div class="infoMessage">')
->append($message);
}
}
}
}
/**
* Controller
*/
class My_FooController extends Zend_Controller_Action
{
public function init()
{
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Application_Plugin_PostMessage());
}
...
public function browseAction()
{
...
// No message is shown here on redirect
...
}
public function newAction()
{
...
// This code shows the placeholder on _forward call
...
}
public function insertAction()
{
if(true) {
return $this->_redirect('/my/foo/browse?message='
. urlencode("success message"));
}
else {
return $this->_forward('new', null, null, array(
'error' => 'error messsage'
));
}
}
}
我不能在成功时使用_forward,因为我不想使用[F5]键重复插入动作
提前致谢
答案 0 :(得分:1)
这就是Flash Messenger的用途:
它将消息存储在您的会话中,无需按原样传递消息。