是否可以在Flash消息中添加链接?

Aar*_*ley 2 php symfony

在我的Symfony控制器中,我通过FlashBag提供错误消息,如下所示:

__CODE__

这会产生预期的输出,我可以添加链接吗?所以我可以输出如下消息:

您提供的代码与我们的预期不符,如果您遇到麻烦,请考虑查看常见问题以及如何解决这些问题.

我已经尝试使用markdown和HTML语法添加它,两者都不起作用,该功能的文档没有说明它是否可行,并且目前没有关于SO的问题解决这个问题.

Ban*_*ang 5

默认情况下,Twig将转义HTML以防止任何注入.

您必须添加一个过滤器,以防止您的HTML转义.

{{ flashMessage|raw }}
Run Code Online (Sandbox Code Playgroud)

http://twig.sensiolabs.org/doc/filters/raw.html


Fra*_*ris 5

不用手动创建一个实例安全的字符串,然后使用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)

  • 经过一番研究后发现 `AbstractController::addFlash` 上的类型提示[已被删除](https://github.com/symfony/symfony/commit/6c4695f4ec0131a2ab91dac7ad6fb86fbda313b6#diff-af6672a1436a317ff73aea4f4bb77153b29876d8b9df 1fe778425dba20bcd1c9) 在 Symfony 5.0 中:-) (2认同)