在我的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 %}
编辑:控制器:
class DashboardController extends Controller
{
public function indexAction()
{
return $this->render('MyAppProfileBundle:Dashboard:index.html.twig', array());
}
}
路由:
pricecalc_profile_dashboad_security:
pattern: /dashboard
defaults: {_controller: MyAppProfileBundle:Dashboard:index }
当我的路线“/ dashboard”被加载时,该模板被正确呈现。
我现在要做的是扩展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
),它包含一个自己的路径,控制器,视图等。该视图包含两个块 - 如navigation
和dashboard
。
现在,我希望通过其他一些Bundles扩展这两个块 - 只需在dashboard
和navigation
块上添加新的导航项和快捷方式。
我想在不修改我的Dashboard-Bundle的情况下进行这些增强 - 如果可能的话。
完成后,我将拥有16个Bundles,每个都在自己的控制器中提供自己的功能 - 它们应该只在该仪表板上链接。 是否可以在不修改视图本身的情况下以这种方式扩展仪表板视图?
答案 0 :(得分:0)
在了解了symfony在扩展控制器和视图方面的工作原理之后,我终于设法解决了这个问题。
我添加了一个新的控制器:
{# src/MyApp/ProfileNewsletterBundle/Controllers/DashboardController.php #}
class DashboardController extends Controller {
public function indexAction()
{
return $this->render('ProfileNewsletterBundle:Dashboard:index.html.twig', array());
}
}
修改了包ProfileNewsletterBundle
以让方法getParent
返回ProfileBundle
,
并修改了视图:
{% extends 'ProfileBundle:Dashboard:index.html.twig' %}
{% block dashboardNavi %}
<li><a href="#">Test</a></li>
{% endblock %}
到目前为止似乎工作正常。 谢谢大家花时间在那上面。