【问题标题】:How to use HTML tags in Symfony flash message如何在 Symfony Flash 消息中使用 HTML 标签
【发布时间】:2016-04-08 09:08:33
【问题描述】:

使用 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>

这会创建一个 Flash 消息

Text with some <strong>HTML</strong> 

而不是

带有一些 HTML

的文本

在我自己的 Twig 模板中,我将使用 raw 过滤器,直接显示 HTML 代码而不是转义版本。但是我怎样才能在addFlash(...) 中达到同样的效果呢?

【问题讨论】:

    标签: php html symfony twig


    【解决方案1】:

    不确定我是否真的理解你的问题。如果这不是您要问的,请直接说出来,我会删除此答案。
    正如documentation 中所说,您使用

    app.session.flashbag.get('success')
    

    检索您的 Flash 消息。 示例:

    {% for flash_message in app.session.flashbag.get('success') %}
            {{ flash_message|raw }}
    {% endfor %}
    

    【讨论】:

      【解决方案2】:

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

      喜欢:

      在设置闪信时:

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

      在树枝文件中:

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

      【讨论】:

      • 嗨!我发现,我使用的默认基本布局没有使用raw 过滤器来显示消息。所以我只是通过扩展旧布局创建了一个新的基本布局,添加了raw 过滤器,它就可以工作了。感谢您的提示!
      • 我已经 -1 这个答案,因为 FlashBagInterface 明确指出 $message 应该是一个字符串。我喜欢这个解决方法,但它实际上是一个干净的 hack。
      • 减号没有问题:-)。我认为如果你知道解决方案确实是一个 hack(如它所要求的那样)并且达到了目的,你会很好。祝你好运。
      • 请注意,您提出的解决方案不在我们的 BC 承诺范围内。这意味着,如果您不以声明可以使用的方式使用接口(即由 docblock 中的参数类型给出),那么即使更新到新补丁,您也有可能破坏您的应用程序释放。
      猜你喜欢
      • 2015-09-23
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多