1

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

另一件事是从核心框架中删除了 flash 消息,所以我决定用 composer 重新添加它们,我意识到它们也发生了变化,出于某种原因,我得到了一个包含两个值而不是一个值的数组。

$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

我怎样才能像 Slim2 一样使用 Flash 消息?或者我什至应该使用它们,有没有更好的替代品可以做同样的工作?

4

4 回答 4

0

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

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

于 2017-03-16T10:59:22.073 回答
0

查看调用getMessages()返回一个数组。如果您只想要一条消息,您可以使用getMessage(). 例如getMessage("error").

于 2015-11-06T15:23:39.120 回答
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 %}
于 2018-10-05T05:48:48.810 回答
0

对于遇到此问题的任何人:Slim 正在返回一个嵌套数组,您需要对两者进行迭代。

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

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

于 2017-02-19T15:16:58.963 回答