理解sonata/twig的模板机制

Understanding the template mechanism of sonata / twig

我正在为symfony/sonata的模板引擎而苦恼...通常我熟悉继承和面向对象设计,但我不明白这些。

我的目标是覆盖 DoctrineORMAdminBundle:CRUD:show_orm_one_to_many.html.twig,因为我相信,我的管理员 class 中的显示功能列表已呈现在那里。我需要它,因为我不仅想在普通列表中显示我的数据,就像奏鸣曲现在正在做的那样。我只想为我的捆绑包中一个显式管理员的显示功能覆盖它,一般情况下

根据奏鸣曲文档,我只能通过将自己的继承版本注入我的服务来覆盖通用模板"SonataAdminBundle:CRUD:base_show.html.twig"

- [ setTemplate, [show, AcmeBundle:TestAdmin:show.html.twig]]

问题是,基本模板包括/涉及许多其他模板,有时由 php 注入模板的对象函数访问。

我怎样才能 access/override

DoctrineORMAdminBundle:CRUD:show_orm_one_to_many.html.twig

所以使用我的版本而不是供应商的版本?我必须覆盖所有链接模板吗?

DoctrineORMAdminBundle:CRUD:show_orm_one_to_many.html.twig 扩展 SonataAdminBundle:CRUD:base_show_field.html.twig

但是我不知道,SonataAdminBundle:CRUD:base_show_field.html.twig 是怎么变成 SonataAdminBundle:CRUD:base_show.html.twig 的。我找不到合适的代码。

谢谢

您可以逐场覆盖模板,而不是覆盖整个节目模板。

$showMapper->add(
    'my_field',
    null, // let the type guesser do its thing
    ['template' => 'whatever_you_need.html.twig']
);

它有效,但您在文档中找不到它,请考虑贡献一段关于它的内容。