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

ABC*_*ABC 4 php symfony twig sonata-admin

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

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

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

{% block theBlockIWantToOverride %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

/**
 * {@inheritdoc}
 */
public function getParent()
{
    return 'SonataAdminBundle';
}
Run Code Online (Sandbox Code Playgroud)

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

qoo*_*mao 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
Run Code Online (Sandbox Code Playgroud)