我有两个与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'
键/值对的数组)。
在将数组提交给视图之前,是否有更好的方法而不是重写数组?
答案 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();
希望有所帮助。