永久扩展symfony细枝模板

永久扩展symfony细枝模板,symfony,twig,symfony-2.6,Symfony,Twig,Symfony 2.6,在我的symfony2应用程序中,我创建了一个仪表板,它当前由许多导航元素组成。 现在我正试图将这些元素拆分成几个包 这是我的代码: {# app/Resources/views/base.html.twig #} {# ... #} {% block body %} {% endblock %} {# ... #} 然后在ProfileBundle中: {# src/MyApp/ProfileBundle/Resources/views/Dashboard/index.html.twig

在我的symfony2应用程序中,我创建了一个仪表板,它当前由许多导航元素组成。 现在我正试图将这些元素拆分成几个包

这是我的代码:

{# app/Resources/views/base.html.twig #}

{# ... #}
{% block body %} {% endblock %}
{# ... #}
然后在ProfileBundle中:

{# src/MyApp/ProfileBundle/Resources/views/Dashboard/index.html.twig #}

{% block body %}
    <p>Heading</p>
    <ul>
    {% block dashboardNavi %} {% endblock %}
    </ul>
{% block %}
路线:

pricecalc_profile_dashboad_security:
    pattern: /dashboard
    defaults: {_controller: MyAppProfileBundle:Dashboard:index }
加载路线/仪表板时,该模板将正确呈现

我现在想做的是,在多个包中扩展dashboardNavi块,而不更改ProfileBundle中的路由。 这些包中的每一个都为自定义操作提供了自己的路由和控制器,但所有包都应该扩展这一块,以便在仪表板屏幕上添加自定义操作的链接

到目前为止,我得到的是:

{# src/MyApp/ProfileNewsletterBundle/Resources/views/Dashboard/indexNewsletter.html.twig #}

{% extends 'MyAppProfileBundle:Dashboard:index.html.twig' %}
{% block dashboardNavi %}
    {{ parent() }}
    <li><a href="#">Test</a></li>
{% endblock %}
但该模板永远不会呈现

编辑2: 也许我对symfony如何在模板继承方面工作的理解有点错误。我将详细说明我正在尝试做什么

我得到了一个Bundle DashboardBundle,它由自己的路线、控制器、视图等组成。视图包含两个块,如导航和仪表板。 现在,我想用其他包扩展这两个块——只需在仪表板和导航块上添加新的导航项和快捷方式。 如果可能的话,我希望在不修改仪表板包的情况下进行这些增强

完成后,我将有16个捆绑包,每个捆绑包在自己的控制器中提供自己的功能——它们应该链接到仪表板上。
是否可以在不修改视图本身的情况下以这种方式扩展仪表板视图?

在了解了symfony在扩展控制器和视图方面的工作原理后,我终于解决了这个问题

我添加了一个新控制器:

class DashboardController extends Controller
{
    public function indexAction()
    {
        return $this->render('MyAppProfileBundle:Dashboard:index.html.twig', array());
    }
}
{# src/MyApp/ProfileNewsletterBundle/Controllers/DashboardController.php #}
class DashboardController extends Controller {
    public function indexAction()
    {
        return $this->render('ProfileNewsletterBundle:Dashboard:index.html.twig', array());
    }
}
修改了bundle ProfileBundle,使方法getParent返回ProfileBundle

并修改了视图:

{% extends 'ProfileBundle:Dashboard:index.html.twig' %}

{% block dashboardNavi %}
    <li><a href="#">Test</a></li>
{% endblock %}
到目前为止,这似乎效果不错。
谢谢大家花时间在这上面。

为什么不起作用?有错误吗?萤火虫?没有错误,什么都没有。模板根本无法识别。能否在MyApp/ProfileBundle中显示一些控制器逻辑,特别是渲染部分?到目前为止粘贴的代码是fine@ThomasPotaire我为MyApp/ProfileBundle添加了控制器/路由。MyApp/ProfileNewsletterBundle当前甚至没有控制器-也许这就是问题所在。。。我想,我可以简单地将捆绑包添加到AppKernel中,然后将其添加到模板中,并让symfony识别该模板以扩展现有模板?在这里猜测一下,您的问题可能是Symfony2不会自动获取Dashboard/indexNewsletter.html.twig。必须在控制器操作中显式呈现它。在Twig中扩展模板就像对象继承一样。