Symfony2覆盖第三方软件包中的部分模板

时间:2014-09-17 19:27:29

标签: php symfony twig sonata-admin

我正在为项目使用SonataAdminBundle,我想覆盖一个块。

如果我在app/Resources/views/SonataAdminBundle/views/standard_layout.html.twig中创建模板,请清除缓存并执行此操作:

{% extends 'SonataAdminBundle::standard_layout.html.twig' %}

{% block theBlockIWantToOverride %}
{% endblock %}

我收到Maximum function nesting level of '250' reached, aborting!错误。

如果我删除extends部分,则会呈现空白页面。相反,我必须将整个文件内容复制到这个新文件,然后更改块内容。我知道这就是Symfony2的工作原理,我只是不知道是否有解决方法而没有所有的代码?

我想这样做的原因是因为我使用了SensioLabsInsight而且它一直困扰着SonataAdminBundle使用的raw枝条过滤器。我知道我可以忽略警告,但感觉不对。

另外,我试图通过创建一个包php app/console generate:bundle来覆盖该包,然后在src / Vendor / AdminBundle / VendorAdminBundle.php中添加:

/**
 * {@inheritdoc}
 */
public function getParent()
{
    return 'SonataAdminBundle';
}

并完成了上述过程,添加了src/Vendor/AdminBundle/Vendor/Resources/views/standard_layout.html.twig并没有解决问题。再次,得到了嵌套级错误。

2 个答案:

答案 0 :(得分:5)

app/Resources/views/SonataAdminBundle/views/standard_layout.html.twig处的模板正在扩展SonataAdminBundle::standard_layout.html.twig,这是同一个文件,这意味着它只会自我扩展直到它死亡。

您应该复制文件的内容并更改其中所需的内容。

或者您可以复制原始standard_layout.html.twig并重命名(例如standard_base.html.twig),然后覆盖您的standard_layout.html.twig版本中的块,然后扩展您的standard_base.html.twig

更为可取的是,对于SonataAdminBundle更好,您可以使用不同的命名模板(例如VendorAdminBundle::standard_layout_override.html.twig)作为standard_template.html.twig的版本来扩展原始文件并在配置中设置它。 ..

sonata_admin:
    templates:
        layout:  VendorAdminBundle::standard_layout_override.html.twig

答案 1 :(得分:1)

按照您尝试的方式:

  1. 您必须复制原始文件的内容
  2. 将内容粘贴到app/Resources/views/SonataAdminBundle/views/standard_layout.html.twig
  3. 覆盖[|修改]您想要的块
  4. 无需添加{% extends 'SonataAdminBundle::standard_layout.html.twig' %}
  5. 使用文档http://sonata-project.org/bundles/admin/master/doc/reference/templates.html

    提取:

    sonata_admin:
        templates:
            layout:  SonataAdminBundle::standard_layout.html.twig
            ajax:    SonataAdminBundle::ajax_layout.html.twig
            list:    SonataAdminBundle:CRUD:list.html.twig
            show:    SonataAdminBundle:CRUD:show.html.twig
            edit:    SonataAdminBundle:CRUD:edit.html.twig
            history: SonataAdminBundle:CRUD:history.html.twig
            preview: SonataAdminBundle:CRUD:preview.html.twig
            delete:  SonataAdminBundle:CRUD:delete.html.twig
            batch:   SonataAdminBundle:CRUD:list__batch.html.twig
            acl:     SonataAdminBundle:CRUD:acl.html.twig
            action:  SonataAdminBundle:CRUD:action.html.twig
            select:  SonataAdminBundle:CRUD:list__select.html.twig
            filter:  SonataAdminBundle:Form:filter_admin_fields.html.twig
            dashboard:           SonataAdminBundle:Core:dashboard.html.twig
            search:              SonataAdminBundle:Core:search.html.twig
            batch_confirmation:  SonataAdminBundle:CRUD:batch_confirmation.html.twig