web-dev-qa-db-ja.com

リスト内のテキストフィールドのSonataAdminBundleカスタムレンダリング

Symfony2とSonataAdminBundleを使用しています。 Postという単純なエンティティがあります。このエンティティには、基本的にhtmlテキスト(レコードのckeditorから)であるコンテンツフィールドがあります。投稿リストにコンテンツフィールドをエスケープせずに生のhtmlとして表示する必要があります。このようにbase_list_fieldテンプレートをハッキングする

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

動作しますが、それは明らかに適切な方法ではありません。ヒントはありますか?

編集:解決しました! sonata_doctrine_orm_adminのconfig.ymlでカスタムhtmlタイプを定義しました:

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

そして、HTMLをエスケープしないカスタムlist_html.html.twigテンプレートを作成しました。

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

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

これで、PostAdminで、configureListFieldsメソッドのフィールドの動作を定義できます。

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

ソリューション:

Sonata_doctrine_orm_adminのconfig.ymlでカスタムhtmlタイプを定義しました:

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

そして、HTMLをエスケープしないカスタムlist_html.html.twigテンプレートを作成しました。

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

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

これで、PostAdminで、configureListFieldsメソッドのフィールドの動作を定義できます。

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

回答が受け入れられた古い投稿であることはわかっていますが、safeオプションを使用して、出力をサニタイズしないようにSymfonyに指示することもできます。

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