Использование FlashMessenger с PartialLoop в скриптах вида ZF - PullRequest
0 голосов
/ 05 февраля 2009

У меня есть два вопроса, связанных с помощником представления FlashMessenger. Оба вопроса должны сделать этот код:

Мой метод действия:

private $_messages; // set to $this->_helper->FlashMessenger; in init()

public function loginAction() {
    // > login validation <

    // Switch based on the result code
    switch ($result->getCode()) {
        // > snip several cases <

        case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID:
            $this->_messages->addMessage("That wasn't the right password."); 
        break;

        case Zend_Auth_Result::SUCCESS:
            $this->_messages->addMessage('Logged you in successfully. Welcome back!');
            $this->_helper->Redirector('index', 'home');
        break;
    }

    // >snip<

    $this->view->messages = $this->_messages->getMessages();
    $this->render();
}

Сценарий просмотра моего макета (Zend_Layout):

<?php if (isset($this->messages) && count($this->messages) > 0) {
    print_r($this->messages);
    //$this->partialLoop('partials/messages.phtml', $this->messages);
} ?>

Почему сообщение не выводится в первый раз, когда оно установлено?

У меня такое ощущение, что это связано с тем, что мессенджер хранится в сеансах, но я уверен, что это связано с моей реализацией.

Когда я отправляю в форму неверное значение, я не получаю сообщения, пока не отправлю форму снова или не обновлю.

Как правильно отправить это помощнику PartialLoop?

Вывод мессенджера выглядит примерно так:

Array(
    [0] => 'Message',
    [1] => 'Second message' //etc.
)

Но это не хорошо для PartialLoop, так как мне нужно получить сообщение (для которого каждое сообщение должно быть массивом, содержащим 'message' => 'Message string' пару ключ / значение).

Есть ли лучший способ вместо переписывания массива перед отправкой его в представление?

Ответы [ 2 ]

1 голос
/ 05 февраля 2009

Обращаясь к OIS Я хотел бы добавить, что вы можете извлекать flash-сообщения в рамках того же запроса, в котором они были добавлены в FlashMessenger. В этом случае вам придется использовать Zend_Controller_Action_Helper_FlashMessenger::getCurrentMessages().

В вашем случае вам придется изменить строку

$this->view->messages = $this->_messages->getMessages();

до

$this->view->messages = $this->_messages->getCurrentMessages();

Надеюсь, это поможет.

1 голос
/ 05 февраля 2009

Я цитирую документацию .

10.8.4.4.1. Введение

Помощник FlashMessenger позволяет вам передавать сообщения, которые пользователь может нужно посмотреть по следующему запросу. к Для этого FlashMessenger использует Zend_Session_Namespace для хранения сообщения для будущего или следующего запроса поиск.

По сути, это означает, что да, вы должны обновить страницу, чтобы увидеть сообщения.

Редактировать для PartialLoop:

Вы можете попробовать это:

foreach ($array as $message) {
  $newArray[]['message'] = $message;
}

Но вам не нужно использовать PartialLoop. Вы можете отправить его в Partial и зациклить его там. Или даже зациклите это прямо на вашем взгляде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...