Symfony2初始控制器

时间:2016-01-04 11:40:53

标签: php symfony

我需要一些提示来解决我的问题。我想为每个请求创建类似初始控制器的东西。或者mayby是更好的方式?

这是我的base.html.twig

<html>
    <head>
        <meta charset="UTF-8" />
        <title>{% block title %}W2 Symfony2{% endblock %}</title>
        {% block stylesheets %}
            <link href="{{ asset('css/base.css') }}" rel="stylesheet" />
        {% endblock %}
        {% block javascripts %}{% endblock %}
        <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
    </head>
    <body>
        <div id="page_wrapper">
            {% block body %}
                <div id="header">
                    {% block header %}
                       {{ user }}
                    {% endblock %}
                </div>
                <div id="menu">
                    {% block menu %}
                       {{ item1 }}
                       {{ item2 }}
                       {{ item3 }}
                    {% endblock %}
                </div>
                <div id="content">
                    {% block content %}
                    {% endblock %}
                </div>
                <div id="footer">
                    {% block footer %}
                    {% endblock %}
                </div>
            {% endblock %}
        </div>
    </body>
</html>

现在我想使用一个初始控制器来使用blocks header, menu and footersrc\Comflex\W2Bundle\Models\User.php中的方法设置src\Comflex\W2Bundle\Models\Menu.php

        class InitialController extends Controller
        {
    public funtsion __construct()
    {
// code generates data for $user, $locales and others
        return $this->render(
                     '::base.html.twig',
                     array(
                        'user' => $user,
                        'locale' => $locale,
                        'menu' => array(
                            'item1', 'item2', 'item3',
                        )
                    )
                    );
        }
        }

www.site.com/web/app.php/home之类的请求会调用src\Comflex\W2Bundle\Controller\HomeController.php,但只会更改block content的内容。这在Symfony2中可能吗?

2 个答案:

答案 0 :(得分:1)

它并不完全清楚你想要实现的目标,也不是你已经尝试过的目标。 在寻求帮助之前,您应该阅读更多文档并亲自尝试

尽管如此,这里有一些提示。

嵌入控制器

您可以使用以下内容在视图中呈现控制器:

{% block menu %}
    {{ render(controller(
        'AppBundle:Menu:mainMenu',
        { 'max': 3 }
    )) }}    
{% endblock %}

如果您将其嵌入块中,则可以在模板中覆盖它。

在&#34; Embedding controllers&#34;。

中阅读更多内容

在每个控制器之前调用代码

如&#34; How to Set Up Before and After Filters&#34;中所述,您可以利用事件侦听器在调用控制器之前或之后调用代码。

树枝功能

Twig功能也可以帮到你。在twig docs中查看Functions

至于菜单,您可以查看KnpMenuBundle中的解决方法。

Twig globals

查看&#34; How to Inject Variables into all Templates (i.e. global Variables)&#34;。

答案 1 :(得分:0)

你混淆了控制器和模板引擎。您可以重复使用大量正面代码,而无需使用相同的控制器。

你可以阅读这个模板哲学:Three level inheritance with twig

如果您想要处理所有请求,您可以(但要非常谨慎)也使用web /目录中的正面控制器symfony