用于flashmessenger的ZF2名称空间

时间:2014-04-11 10:05:51

标签: php forms zend-framework2 flash-message

在我的应用程序中,我使用多个表单,表单提交指向另一个 操作但重定向回上一个操作。在我处理的表单提交操作中 表单输入/验证。要返回错误或成功消息,请使用FlashMessenger。

我的问题是,我不清楚如何为FlashMessenger设置命名空间。我在同一页面上有serval表单,我想使用FlashMessenger messenges。

    if ($this->flashMessenger()->hasMessages()) {

      $messages = $this->flashMessenger()->getMessages();
      foreach($messages as $message) {
      echo $message;
      }

    } 

我猜我应该使用' $ this-> flashMessenger(' namespace')..在我的控制器操作中?但我并没有弄清楚究竟是如何做到这一点的。如果有人有一个例子..这将是伟大的:)

2 个答案:

答案 0 :(得分:2)

您可以使用动作控制器中的这些内置方法将消息添加到特定命名空间中:

// in your controller
$this->flashMessenger()->addInfoMessage('info message');
$this->flashMessenger()->addSuccessMessage('success message');
$this->flashMessenger()->addErrorMessage('error message');

// in your view script
$this->flashMessenger()->getInfoMessages();
$this->flashMessenger()->getSuccessMessages();
$this->flashMessenger()->getErrorMessages();

或者,如果要指定自己的命名空间,可以使用以下内容:

// in your action controller
$defaultNamespace = $this->getNamespace();
$this->setNamespace('yournamespace');
$this->addMessage($message);
$this->setNamespace($defaultNamespace);

// in your view script
$this->flashMessenger()->getMessagesFromNamespace('yournamespace');

有关详细信息,请参阅文档:

http://framework.zend.com/manual/2.3/en/modules/zend.mvc.plugins.html#flashmessenger-plugin http://framework.zend.com/manual/2.3/en/modules/zend.view.helpers.flash-messenger.html#basic-usage

答案 1 :(得分:1)

可以使用setNamespace($namespace)方法手动设置flash messenger控制器插件的名称空间。

$this->flashMessenger()->setNamespace('foo')->addMessage($message);

但也有convenience functions that will set a different namespace and message at the same time

例如,如果要添加成功消息,则可以使用:

$this->flashMessenger()->addSuccessMessage($message);

在内部,插件会将命名空间设置为success并将消息添加到它(然后重置命名空间以允许设置下一条消息(默认为default))

public function addSuccessMessage($message)
{
    $namespace = $this->getNamespace();
    $this->setNamespace(self::NAMESPACE_SUCCESS);
    $this->addMessage($message);
    $this->setNamespace($namespace);

    return $this;
}