永久扩展symfony细枝模板
在我的symfony2应用程序中,我创建了一个仪表板,它当前由许多导航元素组成。 现在我正试图将这些元素拆分成几个包 这是我的代码:永久扩展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
{# 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中扩展模板就像对象继承一样。