Php flashmessenger没有';不显示新消息
我在Zend Framework 2.2.0中使用FlashMessenger将消息从一个动作传递到另一个动作 我有一个联系我们的表单,在它被执行后,我会发送一封电子邮件并将用户转发到主页Php flashmessenger没有';不显示新消息,php,zend-framework2,flashmessenger,Php,Zend Framework2,Flashmessenger,我在Zend Framework 2.2.0中使用FlashMessenger将消息从一个动作传递到另一个动作 我有一个联系我们的表单,在它被执行后,我会发送一封电子邮件并将用户转发到主页 public function contactUsExecuteAction() { $request = $this->getRequest(); if ($request->isPost()) { $contactUs = new ContactUs();
public function contactUsExecuteAction() {
$request = $this->getRequest();
if ($request->isPost()) {
$contactUs = new ContactUs();
$form = new ContactUsForm();
$form->setInputFilter($contactUs->getInputFilter());
$form->setData($request->getPost());
if ($form->isValid()) {
$contactUs->exchangeArray($form->getData());
$name = $contactUs->name;
$email = $contactUs->email;
$message = $contactUs->message;
$completeMessage='name:'.$name."\n".'email:'.$email."\n".$message;
$subject = 'myalcoholist contact us';
mail('<EMAIL_ADDRESSS>',$subject,$completeMessage);
$this->flashMessenger()->addMessage("thank you for contacting myalcoholist.");
return $this->forward()->dispatch('home');
}
}
}
公共功能联系人UseExecuteAction(){
$request=$this->getRequest();
如果($request->isPost()){
$contactUs=新contactUs();
$form=新联系人usform();
$form->setInputFilter($contactUs->getInputFilter());
$form->setData($request->getPost());
如果($form->isValid()){
$contactUs->exchangearlay($form->getData());
$name=$contactUs->name;
$email=$contactUs->email;
$message=$contactUs->message;
$completeMessage='name:'.$name.'\n'.'email:'.$email.\n'.$message;
$subject='我的酗酒者联系我们';
邮件(“”,$subject,$completeMessage);
$this->flashMessenger()->addMessage(“感谢您联系我的酗酒者”);
返回$this->forward()->dispatch('home');
}
}
}
现在我知道forward只是转发页面,我应该只在下一次迭代中获取消息,除非我使用getCurrentMessages。这就是我的layout.phtml
<?php
use Zend\Mvc\Controller\Plugin\FlashMessenger;
$messenger = $this->flashMessenger()->getPluginFlashMessenger();
foreach(array(
FlashMessenger::NAMESPACE_ERROR,
FlashMessenger::NAMESPACE_SUCCESS,
FlashMessenger::NAMESPACE_INFO,
FlashMessenger::NAMESPACE_DEFAULT)
as $namespace):
$messenger->setNamespace($namespace);
$userMsgs = array_merge($messenger->getCurrentMessages(), $messenger->getMessages());
$messenger->clearCurrentMessages();
foreach($userMsgs as $msg):
$msgText = $msg;
if (is_array($msg)){
$msgText = $msg['message'];
}
?>
<div class="alert alert-<?=$namespace?>">
<?=$msgText?>
</div>
<?php endforeach ?>
<?php endforeach ?>
1)
不要使用forward,不会有新的请求
尝试使用重定向,这样您将得到一个新的请求,并会发现等待您的消息,您不需要任何额外的代码来让它工作
$this->redirect()->toRoute('routeName');
或
2)
如果您决定在这样的视图中使用它,那么您总是可以制作一个简单的
查看帮助程序:
namespace Application\View\Helper;
use Zend\Mvc\Controller\Plugin\FlashMessenger as ZendFlash;
use Zend\View\Helper\AbstractHelper;
class FlashMessenger extends AbstractHelper
{
/**
* @var \Zend\Mvc\Controller\Plugin\FlashMessenger
*/
protected $flashMessenger;
/**
* @var array
*/
protected $namespaces = array(
'default',
'error',
'success',
'info',
'warning'
);
/**
* Set the Controller plugin
*
* @param Zend\Mvc\Controller\Plugin\FlashMessenger
*/
public function setFlashMessenger($flashMessenger)
{
$this->flashMessenger = $flashMessenger;
return $this;
}
/**
* @return string
*/
public function __invoke()
{
$messageString = '';
foreach($this->namespaces as $ns) {
$this->flashMessenger->setNamespace($ns);
$messages = $this->flashMessenger->getMessages();
if($this->flashMessenger->hasCurrentMessages()) {
$messages += $this->flashMessenger->getCurrentMessages();
$this->flashMessenger->clearCurrentMessages();
}
if(count($messages) > 0) {
// Twitter bootstrap message box
$messageString .= sprintf(
'<div class="container-fluid">
<div class="alert alert-%s fade in">
<button data-dismiss="alert" class="close" type="button">×</button>
%s
</div>
</div>',
$ns,
implode('<br />', $messages)
);
}
}
return $messageString;
}
}
现在,您可以更好地在视图中使用视图辅助对象:
示例.phtml
<?php echo $this->flashMessenger() ?>
1)
不要使用forward,不会有新的请求
尝试使用重定向,这样您将得到一个新的请求,并会发现等待您的消息,您不需要任何额外的代码来让它工作
$this->redirect()->toRoute('routeName');
或
2)
如果您决定在这样的视图中使用它,那么您总是可以制作一个简单的
查看帮助程序:
namespace Application\View\Helper;
use Zend\Mvc\Controller\Plugin\FlashMessenger as ZendFlash;
use Zend\View\Helper\AbstractHelper;
class FlashMessenger extends AbstractHelper
{
/**
* @var \Zend\Mvc\Controller\Plugin\FlashMessenger
*/
protected $flashMessenger;
/**
* @var array
*/
protected $namespaces = array(
'default',
'error',
'success',
'info',
'warning'
);
/**
* Set the Controller plugin
*
* @param Zend\Mvc\Controller\Plugin\FlashMessenger
*/
public function setFlashMessenger($flashMessenger)
{
$this->flashMessenger = $flashMessenger;
return $this;
}
/**
* @return string
*/
public function __invoke()
{
$messageString = '';
foreach($this->namespaces as $ns) {
$this->flashMessenger->setNamespace($ns);
$messages = $this->flashMessenger->getMessages();
if($this->flashMessenger->hasCurrentMessages()) {
$messages += $this->flashMessenger->getCurrentMessages();
$this->flashMessenger->clearCurrentMessages();
}
if(count($messages) > 0) {
// Twitter bootstrap message box
$messageString .= sprintf(
'<div class="container-fluid">
<div class="alert alert-%s fade in">
<button data-dismiss="alert" class="close" type="button">×</button>
%s
</div>
</div>',
$ns,
implode('<br />', $messages)
);
}
}
return $messageString;
}
}
现在,您可以更好地在视图中使用视图辅助对象:
示例.phtml
<?php echo $this->flashMessenger() ?>
我也在考虑这个问题,但是不应该getCurrentMessages()
返回当前请求中的消息吗?是的,我修改了我的flash messenger,让它做他想做的事情,但最简单的方法是重定向,这也会阻止任何双重提交,非常有用。谢谢我也在考虑这个问题,但是不应该getCurrentMessages()
返回当前请求中的消息吗?是的,我修改了我的flash messenger,让它做他想做的事情,但最简单的方法是重定向,这也会阻止任何双重提交,非常有用。谢谢可能是由于您在布局中使用控制器插件的方式导致的问题。。?在这种情况下,最好创建一个视图帮助器..可能是因为您在布局中使用控制器插件的方式导致了问题。。?在这种情况下,最好创建一个视图帮助器。。