2014-12-30 39 views
1

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

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

是否有可能在控制器中设置默认布局(或地方)?例如:

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

回答

1

您可以在FooController设置layout变量:

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

,然后在模板中使用它:

{% extends layout %} 
3

如果你对每个域的一个单独的配置文件,你可以把布局配置在那里,有它在树枝可以作为一个全局变量:

config_one.yml

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

然后在树枝你可以这样做:

{% extends base_layout %}