Slim 3 - 更新的Flash消息返回两个数组值

时间:2015-11-06 14:35:48

标签: php slim flash-message slim-3

所以我最近决定将我的Slim2应用程序转换为更新的第3版,很多应用程序都必须改变等等。

另一件事是从核心框架中删除了flash消息,所以我决定将它们添加到作曲家中,我意识到它们也已经改变了,并且由于某种原因我得到了一个有两个值的数组而不是而不是一个。

$container['flash'] = function ($c) {
    return new \Slim\Flash\Messages();
};

$this->app->flash->addMessage('error', 'hello');

$flash = $this->flash->getMessages();
print_r($flash); // returns Array ( [error] => Array ( [0] => hello [1] => hello ) )

我的模板显然也抱怨这个,因为它的类型不正确

Notice: Array to string conversion in cache\66\664fc695876aa16573ce7a84cfe29c998af42da36e69199f149219a4e821d44a.php on line 80 Array

我如何使用Flash消息的方式与Slim2使用的方式相同?或者我应该使用它们,是否有更好的替代品能够做同样的工作?

4 个答案:

答案 0 :(得分:0)

查看对getMessages()的{​​{3}}调用会返回一个数组。如果您只想要一条消息,则可以使用getMessage()。例如getMessage("error")

答案 1 :(得分:0)

对于遇到此问题的任何人:Slim返回一个嵌套数组,你需要迭代这两个。

foreach ($messages as $singlemessage) {
    foreach ($singlemessage as $m) {
      print("<li>{$m}</li>");
    }
}

这将获取每个消息集,然后单独打印其中的每条消息。错误“注意:数组到字符串转换”字面上告诉您,您正在尝试将数组作为字符串打印,但您不能。

答案 2 :(得分:0)

您需要将$container['flash']添加到view,例如:twig。如果您使用TWIG渲染视图,那么您可以像$view->getEnvironment()->addGlobal('flash', $container['flash']);

一样添加它

然后在你看{% flash.getMessage('error') %}

答案 3 :(得分:0)

尝试一下

$container['flash'] = function ($container) {
  return new \Slim\Flash\Messages;
};

$container->flash->addMessage('error', 'hello');

$flash = $container->flash->getMessage('error');

var_dump($flash);
在此示例getMessages()中,

getMessage($key)返回所有消息,$key仅返回具有特定error的消息;

如果要访问树枝中的Flash对象,则可以为其制作中间件,例如FlashMiddleware

class FlashMiddleware extends Middleware
{
  public function __invoke($request, $response, $next)
  {
    $this->view->getEnvironment()->addGlobal('flash', $this->flash);

    return $next($request, $response);
  }
}

用于基本中间件

class Middleware
{
  protected $container;

  public function __construct($container)
  {
    $this->container = $container;
  }

  public function __get($property)
  {
    if (isset($this->cotainer->{$property})) {
      return $this->cotainer->{$property};
    }
    // otherwise error
  }
}

几乎在树枝内,您可以这样做

{% if flash.hasMessage('error') %}
    {{ flash.getMessage('error') | first }}
{% endif %}