如何在Symfony flash消息中使用HTML标记

And*_*ord 4 html php symfony twig

使用Symfony 2.7我想在flash消息中包含HTML:

class MyController extends Controller {
    public function someAction(Request $request) {
        ...
        $this->addFlash('success', $tranlator->trans('some.success.msg', array(), 'app'));
        ...
    }
}


// app.yml
some:
    success:
         msg: Text with some <strong>HTML</strong>
Run Code Online (Sandbox Code Playgroud)

这会创建一个Flash消息

Text with some <strong>HTML</strong> 
Run Code Online (Sandbox Code Playgroud)

代替

带有一些HTML的文字

在我自己的Twig模板中,我将使用raw过滤器,直接显示HTML代码而不是转义版本.但是我怎么能在内部实现同样的目标addFlash(...)呢?

Isk*_*sky 11

不确定我真的理解你的问题.如果这不是你要求的,只是说出来,我会删除这个答案.
如您在文档中所述

app.session.flashbag.get('success')
Run Code Online (Sandbox Code Playgroud)

检索您的Flash消息.示例:

{% for flash_message in app.session.flashbag.get('success') %}
        {{ flash_message|raw }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)


Him*_*ana 5

我认为这不能直接完成.但是你可以使用一些html和css来调整显示消息的位置.

喜欢:

在设置flash消息时:

$this->get('session')->getFlashBag()->add('notice', array('type' => 'success', 'title' => 'Done!', 'message' => 'OK! It is done!'));
Run Code Online (Sandbox Code Playgroud)

在twig文件中:

{% for msg in app.session.flashbag.get('notice') %}
<div class="alert alert-{{ msg.type }}">
    <strong>{{ msg.title }}</strong><br/>{{ msg.message }}
</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您提出的解决方案不在我们的BC承诺范围内.这意味着如果你没有以一种它可以使用的方式使用接口(即由docblock中的参数类型给出),那么即使在更新到新补丁时你也可能会自行破坏应用程序发布. (3认同)
  • 嗨!我发现,我使用的默认基本布局没有使用`raw`过滤器来显示消息.所以我只是通过扩展旧的基础布局来创建一个新的基础布局,添加了`raw`过滤器并且它有效.谢谢你的暗示! (2认同)