理解奏鸣曲/twig的模板机制

Posted

技术标签:

【中文标题】理解奏鸣曲/twig的模板机制【英文标题】:Understanding the template mechanism of sonata / twig 【发布时间】:2017-06-29 17:27:19 【问题描述】:

我在 symfony/sonata 的模板引擎上苦苦挣扎……通常我熟悉继承和面向对象的设计,但我不明白这一点。

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

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

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

问题是,基础模板包含/涉及许多其他模板,有时会被php注入模板的对象函数访问。

我如何访问/覆盖

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 的。我找不到合适的代码。

谢谢

【问题讨论】:

【参考方案1】:

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

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

它有效,但您在文档中找不到它,请考虑提供一段关于它的文章。

【讨论】:

我不知道我多久尝试一次这种方式,但它从来没有用过……现在我又试了一次,一切都像魔术一样!谢谢,你拯救了我的一天:)(结论:永不放弃,再试一次...... ^^)但是我是对的,覆盖每个使用过的模板并不像这样容易吗? 如果你的意思是覆盖DoctrineORMAdminBundle:CRUD:show_orm_one_to_many.html.twig,我认为你可以通过标准模板覆盖来实现这一点,如 sf 文档中所述......

以上是关于理解奏鸣曲/twig的模板机制的主要内容,如果未能解决你的问题,请参考以下文章

奏鸣曲页面网址

为模版设计师而生的Twig(下)-Twig使用指南

twig模板的进一步学习以及在symfony当中的使用

如何在奏鸣曲管理列表视图中添加“后备标签”

奏鸣曲管理员变量“form_helper”不存在。树枝更新后

自定义主页奏鸣曲页面