我在 Zend Framework 2.2.0 中使用 flashMesssenger 将消息从一个动作传递到另一个动作。
我有一个联系我们表格,在它执行后我发送一封电子邮件并将用户转发到主页。
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');
}
}
}
现在我知道 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 ?>
但由于某种原因,我没有收到任何消息!它确实正确地转发了用户,但仅此而已。
有任何想法吗 ?