Symfony2 - 带有flash消息的数组到字符串转换异常

Maj*_*ons 9 php symfony flash-message

我在控制器中设置了一条flash消息,代码如下:

$this->get('session')->getFlashBag()->add('success', 'Message sent successfully');
Run Code Online (Sandbox Code Playgroud)

在我的模板中,我使用以下内容(尝试)显示它:

{% if app.session.flashbag.has('success') %}
    <div id="flash">
        {{ app.session.flashbag.get('success') }}
    </div>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

问题是,尽管API文档声明get返回一个字符串,但我得到一个数组到字符串转换异常.如果我将模板中的代码更改为:

{% for flashMessage in app.session.flashbag.get('success') %}
    <div id="flash">
        {{ flashMessage }}
    </div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

它完美地运作.我宁愿不在这里使用循环,因为我只是要么有或没有.

有没有一个解决方案,我可以检查是否存在单个Flash消息并显示它是否存在?还是我坚持使用无用的循环?

Maj*_*ons 11

通过索引为0来解决它:

{{ app.session.flashbag.get('success')[0] }}
Run Code Online (Sandbox Code Playgroud)

我的怀疑是正确的 - get返回一个数组而不是一个字符串.这是flashbag的add方法:

public function add($type, $message)
{
    $this->flashes[$type][] = $message;
}
Run Code Online (Sandbox Code Playgroud)

而且get:

public function get($type, array $default = array())
{
    if (!$this->has($type)) {
        return $default;
    }

    $return = $this->flashes[$type];

    unset($this->flashes[$type]);

    return $return;
}
Run Code Online (Sandbox Code Playgroud)

他们需要修复API文档,以便反映现实.它们还应该提供一种处理单个Flash消息的优雅方式.

编辑:向后兼容(PHP 5.3及以下)版本 -

{% if app.session.flashbag.has('success') %}
    {% set flashbag = app.session.flashbag.get('success') %}
    {% set message = flashbag[0] %}
    <div id="flash">
        {{ message }}
    </div>
{% endif %}
Run Code Online (Sandbox Code Playgroud)