8

フォームタイプ「sonata_type_collection」のテンプレートを上書きすることは可能ですか?

私はこれらの線に沿って試しました:

$formMapper->add('slides', 'sonata_type_collection', array(), array(
                'edit' => 'inline',
                'inline' => 'table',
                'sortable'  => 'priority',
                'template' => 'MyBundle:Form:slides.admin.html.twig'
            ));

しかし、役に立たない。

テンプレート全体をオーバーライドできることはわかっていますが、このフォームタイプを使用するすべての場所ではなく、このフォームに対してのみオーバーライドしたいと思います。

これが可能かどうか誰かが知っていますか?

ありがとう

4

1 に答える 1

18

/vendor/sonata-project/admin-bundle/Sonata/AdminBundle/Form/Extension/Field/Type/FormTypeFieldExtension.php小枝ブロックのレンダリングに優先順位を付けるために使用するフォームビューにアタッチする型の配列を実際に設定するコードがたくさん見つかりました:(99行目から105行目)

// add a new block types, so the Admin Form element can be tweaked based on the admin code
        $types    = $view->getVar('types');
        $baseName = str_replace('.', '_', $sonataAdmin['field_description']->getAdmin()->getCode());
        $baseType = $types[count($types) - 1];

        $types[] = sprintf('%s_%s', $baseName, $baseType);
        $types[] = sprintf('%s_%s_%s', $baseName, $sonataAdmin['field_description']->getName(), $baseType);

したがって、私がしなければならなかったのは、mycompany_admin_content_galleries_sonata_type_collection_widgetまたはmycompany_admin_content_galleries_slides_sonata_type_collection_widgetと呼ばれるブロックを定義することだけであり、それはこの管理フォームにのみ適用されます:)

Adminクラスでこのソリューションを完了するために、次の関数を追加しました。

public function getFormTheme()
{
    return array_merge(
        parent::getFormTheme(),
        array('MyBundle:Gallery:admin.slides.html.twig')
    );
}

そして私MyBundle/Resources/views/Gallery/admin.slides.html.twigは以下を含むを作成しました:

{% use 'SonataAdminBundle:Form:form_admin_fields.html.twig' %} // I think this 
             line is not really needed as the base admin's form theme uses this file

{% block my_bundle_content_pages_slides_sonata_type_collection_widget %}

    // copied and edited the contents of Sonata/DoctrineORMAdminBundle/Resources/views/CRUD/edit_orm_one_to_many.html.twig

{% endblock %}
于 2012-07-16T20:44:40.620 に答える