所以我最近决定将我的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使用的方式相同?或者我应该使用它们,是否有更好的替代品能够做同样的工作?
答案 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 %}