Symfony SonataAdminBundle自定义呈现列表中的文本字段

Symfony SonataAdminBundle自定义呈现列表中的文本字段,symfony,twig,sonata-admin,Symfony,Twig,Sonata Admin,我用的是symfony2和SonataAdminBundle。 我有一个名为Post的简单实体,其中的内容字段基本上是html文本(来自记录的ckeditor)。我需要在Post列表中将内容字段显示为原始html,而不转义它。 像这样攻击基本列表字段模板 {% block field %}{{ value|raw }}{% endblock %} 行得通,但这显然不是正确的方式。 有什么提示吗 编辑:已解决!我在config.yml中为sonata_doctrine_orm_admin定义了一

我用的是symfony2和SonataAdminBundle。 我有一个名为Post的简单实体,其中的内容字段基本上是html文本(来自记录的ckeditor)。我需要在Post列表中将内容字段显示为原始html,而不转义它。 像这样攻击基本列表字段模板

{% block field %}{{ value|raw }}{% endblock %}
行得通,但这显然不是正确的方式。 有什么提示吗

编辑:已解决!我在config.yml中为sonata_doctrine_orm_admin定义了一个自定义html类型:

sonata_doctrine_orm_admin:
    templates:
      types:
        list:
          html: MyBundle:Default:list_html.html.twig
sonata_doctrine_orm_admin:
    templates:
      types:
        list:
          html: MyBundle:Default:list_html.html.twig
并创建了自定义列表_html.html.twig模板,其中我不转义html:

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

{% block field%}
    {{value|raw}}
{% endblock %}
{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

{% block field%}
    {{value|raw}}
{% endblock %}
现在,在PostAdmin中,我可以在configureListFields方法中定义字段的行为:

$listMapper
    ->add('content', 'html')
$listMapper
    ->add('content', 'html')
解决方案:

我在config.yml中为sonata_doctrine_orm_admin定义了一个自定义html类型:

sonata_doctrine_orm_admin:
    templates:
      types:
        list:
          html: MyBundle:Default:list_html.html.twig
sonata_doctrine_orm_admin:
    templates:
      types:
        list:
          html: MyBundle:Default:list_html.html.twig
并创建了自定义列表_html.html.twig模板,其中我不转义html:

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

{% block field%}
    {{value|raw}}
{% endblock %}
{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

{% block field%}
    {{value|raw}}
{% endblock %}
现在,在PostAdmin中,我可以在configureListFields方法中定义字段的行为:

$listMapper
    ->add('content', 'html')
$listMapper
    ->add('content', 'html')

我知道这是一篇有公认答案的老文章,但现在你也可以使用安全选项告诉Symfony不要对输出进行消毒

$mapper->add('content', null, [
            'safe' => true,
        ]);

你应该添加你自己的答案并接受它(在一个小小的延迟之后,我认为这是自我接受的两天),而不是用解决方案编辑你的答案。