我正在使用 zend 的 ZF3 和 FlashMessenger 插件。这个插件不需要任何配置。我只用我的自定义类覆盖它,因为我想以其他方式使用两种方法:
class CustomFlashMessenger extends FlashMessenger
{
public function hasMessages($namespace = null)
{
if (null !== $namespace) {
return parent::hasMessages($namespace);
}
return parent::hasMessages('default') ||
parent::hasMessages('error') ||
parent::hasMessages('warning') ||
parent::hasMessages('info') ||
parent::hasMessages('success');
}
public function clearMessages($namespace = null)
{
if (null !== $namespace) {
return parent::clearMessages($namespace);
}
return parent::clearMessages('default') ||
parent::clearMessages('error') ||
parent::clearMessages('warning') ||
parent::clearMessages('info') ||
parent::clearMessages('success');
}
}
它已注册Module.php
并且工作正常。
我的问题是,当我想在屏幕上显示消息时:
用户控制器.php
public function loginAction()
{
$form = new LoginForm();
if (null !== $this->identity()) {
return $this->redirect()->toRoute('home');
}
if ($this->getRequest()->isPost()) {
$data = $this->params()->fromPost();
$form->setData($data);
if (!$form->isValid()) {
foreach ($form->getMessages() as $message) {
if (is_array($message)) {
$message = array_pop($message);
}
$this->flashMessenger()->addErrorMessage($message);
}
}
$data = $form->getData();
$result = $this->authManager->login($data[ 'login' ], $data[ 'password' ], $data[ 'remember_me' ]);
if ($result->getCode() == Result::SUCCESS) {
return $this->redirect()->toRoute('home');
} else {
$this->flashMessenger()->addErrorMessage('Error');
}
}
$this->layout()->setTemplate('layout/login');
return new ViewModel(
[
'form' => $form,
]);
}
布局/登录.phtml
<?php if ($this->flashMessenger()->hasMessages()) { ?>
<div class="message">
<?php echo $this->partial('partial/messages'); ?>
</div>
<?php } ?>
部分/messages.phtml
<?php
echo $this->flashMessenger()->render('info');
echo $this->flashMessenger()->render('success');
echo $this->flashMessenger()->render('warning');
echo $this->flashMessenger()->render('error');
?>
我要查看的消息延迟一页刷新。例如。设想:
- 进入登录页面
- 想用错误的密码登录并点击提交
- 页面刷新,找不到任何信息
- 使用良好的信用登录并单击提交
- 我已登录并在主页上看到错误消息(密码错误)。