2017-02-11 57 views
1

我很苦恼symfony/sonata的模板引擎......通常我很熟悉继承和面向对象的设计,但我不明白这一点。理解奏鸣曲/树枝的模板机制

我的目标是重写DoctrineORMAdminBundle:CRUD:show_orm_one_to_many.html.twig,因为我相信,我的管理类中show函数的列表在那里呈现。我需要它,因为我想要显示我的数据不仅仅是像奏鸣曲一样的简单列表,现在正在进行。我只想在我的捆绑包中重写一个显式管理员的显示功能,并且不是一般的

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

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

谢谢

回答

0

您可以在字段的基础上重写模板,而不是重写整个显示模板。

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

它的工作原理,你不能在文档中找到它,请考虑贡献一段关于它。

+0

我不知道我多久尝试这种方式,它从来没有工作......现在我再次尝试,所有的工作都像魔术一样!谢谢,你救了我的一天:)(结论:永不放弃,再次尝试一次... ^^) 但我是否正确,它不像这样轻松重写每个使用过的模板? –

+0

如果你的意思是覆盖'DoctrineORMAdminBundle:CRUD:show_orm_one_to_many.html.twig',我想你可以通过sf文档中描述的标准模板覆盖来实现... – greg0ire