Symfony 在控制器中设置细枝布局

Symfony 在控制器中设置细枝布局,symfony,twig,Symfony,Twig,我有多个子域名,每个都有自己的布局。有些控制器是跨子域共享的(例如登录),有些则不是。我想做的是根据域设置布局,这样我就不需要在每个模板中编写: {% if app.request.domain == 'one' %} {% set layout = '::layout-one.html.twig' %} {% elseif app.request.domain == 'two' %} {% set layout = '::layout-two.html.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 %}
{% extends layout %}
是否可以在控制器(或其他地方)中设置默认布局?例如:


如果每个域都有单独的配置文件,则可以将布局配置放在其中,并将其作为全局变量在twig中提供:

config_one.yml

twig:
    globals:
        base_layout: '::layout-one.html.twig'
然后在细枝上你可以做:

{% extends base_layout %}

如果每个域都有单独的配置文件,则可以将布局配置放在其中,并将其作为全局变量在twig中提供:

config_one.yml

twig:
    globals:
        base_layout: '::layout-one.html.twig'
然后在细枝上你可以做:

{% extends base_layout %}

您可以在
FooController
中设置
layout
变量:

class FooController 
{
    function fooAction()
    {
        ...
        return $this->render($template, array(
            'layout' => $layout
        ));
    }
}
然后在模板中使用它:

{% 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 %}
{% extends layout %}

您可以在
FooController
中设置
layout
变量:

class FooController 
{
    function fooAction()
    {
        ...
        return $this->render($template, array(
            'layout' => $layout
        ));
    }
}
然后在模板中使用它:

{% 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 %}
{% extends layout %}