Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 小枝扩展禁用自动转义_Symfony_Twig_Escaping_Symfony4_Twig Extension - Fatal编程技术网

Symfony 小枝扩展禁用自动转义

Symfony 小枝扩展禁用自动转义,symfony,twig,escaping,symfony4,twig-extension,Symfony,Twig,Escaping,Symfony4,Twig Extension,我做了一个细枝扩展,以便能够调用模板中的函数,但不幸的是,现在这些函数的呈现html内容被转义了。你知道我怎么才能禁用它吗 FrontendTwigExtension.php class FrontendTwigExtension extends Twig_Extension { /** * @var DataProviderService */ private $dataProvider; /** * FrontendTwigExtension constructor. * @par

我做了一个细枝扩展,以便能够调用模板中的函数,但不幸的是,现在这些函数的呈现html内容被转义了。你知道我怎么才能禁用它吗

FrontendTwigExtension.php

class FrontendTwigExtension extends Twig_Extension
{
/**
 * @var DataProviderService
 */
private $dataProvider;

/**
 * FrontendTwigExtension constructor.
 * @param DataProviderService $dataProvider
 */
public function __construct(DataProviderService $dataProvider)
{
    $this->dataProvider = $dataProvider;
}

/**
 * @return array
 */
public function getFunctions(): array
{
    return array(
        new Twig_Function('getProductDetailData',
            [$this, 'getProductDetailData'],
            ['needs_environment' => true]
        ),
        new Twig_Function('getPageHeader',
            [$this, 'getPageHeader'],
            ['needs_environment' => true]
        )
    );
}

/**
 * @param Twig_Environment $env
 * @return string
 * @throws Twig_Error_Loader
 * @throws Twig_Error_Runtime
 * @throws Twig_Error_Syntax
 */
public function getPageHeader(Twig_Environment $env): string
{
    return $env->render('Component/PageHeader/pageHeader.html.twig');
}

/**
 * @param Twig_Environment $env
 * @return string
 * @throws Twig_Error_Loader
 * @throws Twig_Error_Runtime
 * @throws Twig_Error_Syntax
 */
public function getProductDetailData(Twig_Environment $env): string
{
    $service = new ProductDetailDataService($this->dataProvider);
    return $env->render('Module/ProductDetailPage/productDetailData.html.twig',
        [
            'productData' => $service->getData()
        ]
    );
}
}
template.html.twig

{% extends 'base.html.twig' %}
{% block pageHeader %}
    {{ getPageHeader() }}
    {{ getProductDetailData() }}
{% endblock %}
服务.亚马尔

App\Extension\FrontendTwigExtension:
    arguments:
        - '@App\DataProvider\DataProviderService'
    tags:
        - { name: 'twig.extension' }

您需要设置
是否安全
选项:

['needs_environment' => true, 'is_safe' => ['html']]

尝试在细枝中使用
raw
函数

{% extends 'base.html.twig' %}
{% block pageHeader %}
    {{ getPageHeader()|raw }}
    {{ getProductDetailData()|raw }}
{% endblock %}

资料来源:

是的,我自己刚发现谢谢你的回答。将保留它以备将来参考。问题是关于引入的自定义筛选器/函数。不建议在此处使用
raw
,因为您可以在扩展内将过滤器标记为安全的。见G1.3的answer@DarkBee它将产生同样的效果。。。使用
safe
等同于使用
raw
。一个用于控制器,第二个用于细枝。完全没有区别。它会有同样的效果,但就可用性和易用性而言,我觉得这个答案并不正确usefull@DarkBee
'is_safe'=>['html']
只需调用
raw
获取树枝。。。我看不出它有多没用,使用起来有多困难。。。两个答案都是正确的。OP选择第一个,仅此而已。。。缺点就是对读者说我的答案无效。。。。但它是。。。在处理OP时,他使用在twig中调用的自定义函数,但有时您不会这样做,并且仍然需要呈现HTML。因此使用
raw
。这只是两种可能的解决方案之一。存在要使用的细枝过滤器。向下投票表示该答案对该问题无效。并不是说它无效。想象一下,如果有人编写了一个过滤器,他/她必须在项目中使用100多次,那么他/她必须将过滤器
raw
放置在自定义过滤器/函数后面100多次。。。明白我的观点了吗?为什么这不是很有用?