在控制器中设置Twig布局

时间:2014-12-30 13:44:22

标签: symfony twig

我有多个子域,每个子域都有自己的布局。有些控制器是跨子域共享的(例如登录),有些则不是。我想做的是根据域设置布局,这样我就不需要在每个模板中编写:

{% if app.request.domain == 'one' %}
  {% set layout = '::layout-one.html.twig' %}
{% elseif app.request.domain == 'two' %}
  {% set layout = '::layout-two.html.twig' %}
...
{% endif %}
{% extends layout %}

是否可以在控制器(或某处)设置默认布局? E.g:

class FooController 
{
    function fooAction()
    {
        ...
        $templating = $this->get('templating');
        $templating->setLayout($layout);
        return $templating->renderResponse($view, $parameters, $response);
    }
}

2 个答案:

答案 0 :(得分:3)

如果每个域都有一个单独的配置文件,您可以将布局配置放在那里,并将其作为全局变量在twig中使用:

<强> config_one.yml

twig:
    globals:
        base_layout: '::layout-one.html.twig'

然后在树枝上你可以做:

{% extends base_layout %}

答案 1 :(得分:1)

您可以在layout

中设置FooController变量
class FooController 
{
    function fooAction()
    {
        ...
        return $this->render($template, array(
            'layout' => $layout
        ));
    }
}

然后在模板中使用它:

{% extends layout %}