在Zend Framework 2中定义多个布局

时间:2016-05-17 12:31:30

标签: php zend-framework layout zend-framework2

我有一个ZF2应用程序,可在多个主机上运行,​​例如:

www.site1.com
www.site2.com
www.site3.com
www.site4.com
www.site5.com
www.site6.com

所有这些网站仅使用相同的layout.phtml文件,该文件称为layout.phtml,并且根据网站的类型,为布局文件加载不同的CSS皮肤。

我的问题是,我如何为site6创建一个单独的布局文件,以便它只使用该布局?

1 个答案:

答案 0 :(得分:0)

您可以使用the ServerUrl view helper。另请检查this answer here

$serverUrl = $this->serverUrl(); // output: http://www.siteX.com

然后,您可以根据此变量的值设置css或其他特定布局。例如,您可以在视图中使用a php switch statement(在layout.html文件中):

在视图中:

switch( $serverUrl ){
    case 'http://www.site1.com':
        // logic for site 1
        break;
    case 'http://www.site2.com':
        // logic for site 2
        break;
    case 'http://www.site3.com':
        // logic for site 3
        break;
    case 'http://www.site4.com':
        // logic for site 4
        break;
    case 'http://www.site5.com':
        // logic for site 5
        break;
    case 'http://www.site6.com':
        // logic for site 6
        break;
}

或者,您也可以根据$serverUrl的值在控制器中设置不同的布局。如何设置布局也解释here in this answer。如下所示:

在控制器中:

$serverUrlHelper = $this->getServiceLocator()->get('ViewHelperManager')->get('ServerUrl');
$serverUrl = $serverUrlHelper();

switch( $serverUrl ){
    case 'http://www.site1.com':
        $this->layout('layout/layout1');
        break;
    case 'http://www.site2.com':
        $this->layout('layout/layout2');
        break;
    case 'http://www.site3.com':
        $this->layout('layout/layout3');
        break;
    case 'http://www.site4.com':
        $this->layout('layout/layout4');
        break;
    case 'http://www.site5.com':
        $this->layout('layout/layout5');
        break;
    case 'http://www.site6.com':
        $this->layout('layout/layout6');
        break;
}

现在我使用了switch语句,但有可能有100种不同的方法可以做到这一点,但我会留下你的创造力。