理解奏鸣曲/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的模板机制的主要内容,如果未能解决你的问题,请参考以下文章