【问题标题】:Permanently extend symfony twig template永久扩展 symfony 树枝模板
【发布时间】:2015-05-13 11:31:45
【问题描述】:

在我的 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”被加载时,该模板正确呈现。

我现在想做的是在多个 Bundle 中扩展 dashboardNavi-Block,而不改变我的 ProfileBundle 中的路由。 这些 Bundle 中的每一个都为自定义操作带来了它自己的路由和控制器,但是所有的 bundle 都应该扩展该块以将其自定义操作的链接添加到仪表板屏幕。

到目前为止我所拥有的是:

{# 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),它包含一个自己的路由、控制器、视图等。该视图包含两个块 - 例如 navigationdashboard。 现在,我想让这两个块由其他一些 Bundle 扩展 - 只需在 dashboardnavigation 块上添加新的导航项和快捷方式。 我想在不修改我的 Dashboard-Bundle 的情况下进行这些增强 - 如果可能的话。

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

【问题讨论】:

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

标签: symfony twig symfony-2.6


【解决方案1】:

在了解了 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 %}

到目前为止,这似乎工作正常。 感谢大家花时间在这上面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多