在我的Symfony控制器中,我通过FlashBag提供错误消息,如下所示:
__CODE__
这会产生预期的输出,我可以添加链接吗?所以我可以输出如下消息:
您提供的代码与我们的预期不符,如果您遇到麻烦,请考虑查看常见问题以及如何解决这些问题.
我已经尝试使用markdown和HTML语法添加它,两者都不起作用,该功能的文档没有说明它是否可行,并且目前没有关于SO的问题解决这个问题.
默认情况下,Twig将转义HTML以防止任何注入.
您必须添加一个过滤器,以防止您的HTML转义.
{{ flashMessage|raw }}
Run Code Online (Sandbox Code Playgroud)
http://twig.sensiolabs.org/doc/filters/raw.html
不用手动创建一个实例安全的字符串,然后使用raw的过滤器的所有您的提示信息,你也可以创建一个Twig_Markup对象(例如见这个和这个 StackOverflow的答案),并把一个在闪光灯袋。
(下面的代码是克里斯答案的扩展。)
错误:使用raw,这适用于所有即时消息
// PHP Controller
$newPageUrl = $this->generateUrl('core_page_id',['id'=>$page->getId()]);
$this->addFlash('success',
sprintf('Page updated! <a href="%s">View page</a>', $newPageUrl)
);
Run Code Online (Sandbox Code Playgroud)
<!-- your Twig template -->
{% for message in app.flashes('success') %}
<div class="flash-notice alert alert-success"><i class="fa fa-check"></i> {{ message|raw }}</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
更好:使用 Twig_Markup
这种方法通常不会绕过Twig的转义机制,并且可以使控制器逻辑和模板设计更清晰地分离。
PHP代码中没有内置HTML标记:
// PHP Controller
$this->addFlash('success',
new Twig_Markup($this->renderView('flashes/page_update.html.twig', ['page' => $page]), 'UTF-8')
);
Run Code Online (Sandbox Code Playgroud)
您可以将所有您熟悉和喜爱的Twig功能用于Flash消息:
<!-- flashes/page_update.html.twig -->
Page updated! <a href="{{ path('core_page_id', {id:page.id}) }}">View page</a>
Run Code Online (Sandbox Code Playgroud)
基本模板保留了干净的消息显示逻辑,并且仍具有自动转义功能:
<!-- your Twig template -->
{% for message in app.flashes('success') %}
<div class="flash-notice alert alert-success"><i class="fa fa-check"></i> {{ message }}</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1967 次 |
| 最近记录: |