Zend плагин FlashMessenger откладывается обновление одной страницы

Я использую плагин ZF3 и FlashMessenger от Zend. Этот плагин не требует какой-либо настройки. Я переопределяю его только с помощью своего пользовательского класса, потому что я хочу использовать два метода по-другому:

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 и работает нормально.

Моя проблема в том, когда я хочу отображать сообщения на экране:

UserController.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,
]);
}

макет / login.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');
?>

Мои сообщения для просмотра задерживаются на одну страницу обновления.
Например. сценарий:

  1. Переход на страницу входа
  2. Хотите войти с неверным паролем и нажав кнопку отправить
  3. Страница обновляется и не может найти никакой информации
  4. Войдите с хорошими кредитными данными и нажмите «Отправить»
  5. Я вошел в систему и вижу сообщение об ошибке (неверный пароль) на домашней странице.

1

Решение

Плагин Flash Messenger предназначен для отображения сообщений на следующий запрос и полезен, например, с пост-запрос-получить плагин.

Если ваш код генерирует сообщения в том же запросе, который их отображает, просто передайте сообщения напрямую в модель представления, плагин не нужен.

return new ViewModel(
[
'messages' => $form->getMessages(),
// ... other variables
]
);

Не связано с вашим вопросом, но в loginAction в коде, который вы разместили, метод $this->authManager->login вызывается независимо от того, была ли ваша форма подтверждена или нет. Вы можете поместить вызов этого метода в другое после if (!$form->isValid()) { ...

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]