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

时间:2012-01-04 15:34:28

标签: symfony twig sonata-admin

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

{% 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

并创建了自定义list_html.html.twig模板,其中我不会转义HTML:

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

{% block field%}
    {{value|raw}}
{% endblock %}

现在在PostAdmin中我可以在configureListFields方法中定义字段的行为:

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

2 个答案:

答案 0 :(得分:24)

解决方案:

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

sonata_doctrine_orm_admin:
    templates:
      types:
        list:
          html: MyBundle:Default:list_html.html.twig

并创建了自定义list_html.html.twig模板,其中我不会转义HTML:

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

{% block field%}
    {{value|raw}}
{% endblock %}

现在在PostAdmin中我可以在configureListFields方法中定义字段的行为:

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

答案 1 :(得分:0)

我知道这是一则旧文章,答案已经被接受,但是现在您也可以使用 safe 选项来告诉Symfony不要对输出内容进行消毒。

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