gpt4 book ai didi

symfony - 我如何才能不在服务模板中使用 |raw 过滤器

转载 作者:行者123 更新时间:2023-12-02 21:03:51 25 4
gpt4 key购买 nike

我有一个服务,可以生成并返回面包屑的简单 html 代码。但在模板中我总是需要使用 |raw 过滤器:

{{ $breadcrumb|raw }}

否则我可以看到转义的 html 代码,而不是真正的链接:

<a href="/">Home</a> / <a href="/contacts">Contacts</a>

使用 |raw 过滤器效果很好,但也许我做错了什么,并且在没有 |raw 过滤器的情况下还有其他方法可以做到这一点吗?或者在这种情况下通常使用原始过滤器?我认为有更合适的解决方案,不是吗?请帮助我更好地理解它。

最佳答案

默认情况下,传递给 twig 模板的每个参数都会被转义。所以通常你需要使用raw过滤器。但如果使用 raw 过滤器对您来说很烦人,那么您有两个选择。

首先 - 禁用自动转义(不推荐):

通过在 config.yml 中将 autoescape 选项设置为 false 来全局关闭自动转义:

twig:
autoescape: false

第二 - 创建 Twig 扩展(推荐):

使用渲染内容的函数创建 twig 扩展,并且它是 html 安全的。

<?php

// src/Acme/DemoBundle/Twig/BreadcrumbExtension.php
namespace Acme\DemoBundle\Twig;

class BreadcrumbExtension extends \Twig_Extension
{
protected $breadcrumbService;

public function __construct(BreadcrumbService $breadcrumbService)
{
$this->breadcrumbService = $breadcrumbService;
}

/**
* Returns a list of functions to add to the existing list.
*
* @return array An array of functions
*/
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('acme_breadcrumbs',
array($this, 'renderBreadcrumbs'),
array('is_safe' => array('html'))
),
);
}

public function renderBreadcrumbs()
{
return $this->breadcrumbService->renderHtml();
}

public function getName()
{
return 'breadcrumb_extension';
}
}

注册服务:

<service id="acme.breadcrumb.twig.extension" class="Acme\DemoBundle\Twig\BreadcrumbExtension" public="false">
<tag name="twig.extension" />
<argument type="service" id="acme.breadcrumb.service" />
</service>

现在您可以在 Twig 模板中使用它,如下所示:

{{ acme_breadcrumbs() }}

关于symfony - 我如何才能不在服务模板中使用 |raw 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21784422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com