在ZF视图脚本中使用FlashMessenger和PartialLoop

时间:2009-02-04 21:22:12

标签: php zend-framework

我有两个与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 个答案:

答案 0 :(得分:1)

来自the documentation的错误引用。

  

10.8.4.4.1。引言

     

FlashMessenger帮助程序允许您   传递用户可能传递的消息   需要看下一个请求。至   实现这一点,FlashMessenger使用   要存储的Zend_Session_Namespace   用于将来或下一个请求的消息   检索。

基本上,这意味着您必须刷新页面才能看到消息。

编辑PartialLoop:

你可以试试这个:

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

但你不必使用PartialLoop。您可以将它发送到Partial并在那里循环。或者甚至在你的视图中将其循环播放。

答案 1 :(得分:1)

参考OIS我想补充一点,您可以在添加到FlashMessenger的同一请求中检索Flash消息。在这种情况下,您必须使用Zend_Controller_Action_Helper_FlashMessenger::getCurrentMessages()

在您的情况下,您必须更改行

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

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

希望有所帮助。