Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ZF2基于域加载不同的视图_Php_Zend Framework_Zend Framework2_Zend Framework3 - Fatal编程技术网

Php ZF2基于域加载不同的视图

Php ZF2基于域加载不同的视图,php,zend-framework,zend-framework2,zend-framework3,Php,Zend Framework,Zend Framework2,Zend Framework3,我有一个应用程序,我想使用我的应用程序中的现有模块基于不同的域加载一些不同的视图,如何在我的路由中实现这一点 我只想更改我的布局,这样我的视图就应该只涉及其中。第一部分 在ZF2中,您可以在ActionController中更改布局: public function indexAction () { $this->layout('layout/customLayout'); return $viewModel; } 因此,您必须在module.config.php

我有一个应用程序,我想使用我的应用程序中的现有模块基于不同的域加载一些不同的视图,如何在我的路由中实现这一点


我只想更改我的布局,这样我的视图就应该只涉及其中。

第一部分

在ZF2中,您可以在ActionController中更改布局:

public function indexAction () 
{
     $this->layout('layout/customLayout');

     return $viewModel;
}
因此,您必须在module.config.php(view_manager部分)中添加一个条目:

第二部分

您有两个域指向服务器上的同一源代码目录(您的zf2项目):

通过web服务器配置(nginx、apache),两个请求都将路由到IndexController(例如,在应用程序模块中)。默认情况下,路由不依赖于服务器的名称(主机名)。或者更好地说:它的领域。仅供参考,您可以为特定的主机名配置路由,但这不符合主题;)web服务器根据调用域更改PHP的一些环境变量,例如
$\u server
。在这个php数组中,您可以检测诸如当前服务器名称之类的详细信息。 在应用程序\控制器\索引控制器中检测此项:

public function indexAction() {
    $serverName = $this->getRequest()->getServer('SERVER_NAME'); 
    $layout = ($serverName == 'domain2.com') ? 'layout/customLayout' : 'layout/layout';
    $this->layout($layout);
    // other stuff
}

第一部分

在ZF2中,您可以在ActionController中更改布局:

public function indexAction () 
{
     $this->layout('layout/customLayout');

     return $viewModel;
}
因此,您必须在module.config.php(view_manager部分)中添加一个条目:

第二部分

您有两个域指向服务器上的同一源代码目录(您的zf2项目):

通过web服务器配置(nginx、apache),两个请求都将路由到IndexController(例如,在应用程序模块中)。默认情况下,路由不依赖于服务器的名称(主机名)。或者更好地说:它的领域。仅供参考,您可以为特定的主机名配置路由,但这不符合主题;)web服务器根据调用域更改PHP的一些环境变量,例如
$\u server
。在这个php数组中,您可以检测诸如当前服务器名称之类的详细信息。 在应用程序\控制器\索引控制器中检测此项:

public function indexAction() {
    $serverName = $this->getRequest()->getServer('SERVER_NAME'); 
    $layout = ($serverName == 'domain2.com') ? 'layout/customLayout' : 'layout/layout';
    $this->layout($layout);
    // other stuff
}

我在我的模块(Module.php)中做这种事情。在bootstrap方法中,我首先触发setLayout方法。但首先,我需要在模板映射中设置布局。然后,我可以根据路由、控制器、主机等更改布局。我根据特定模式构建路由,以便对它们进行逻辑分组。(

bootstrap上的公共函数(MvcEvent$e)
{
$app=$e->getParam('application');
$app->getEventManager()->附加(
“调度”,数组(
美元这个,
“设置布局”
));
}
公共功能设置布局(MvcEvent$e)
{
$matches=$e->getRouteMatch();
$routeName=$matches->getMatchedRouteName();
$controller=$matches->getParam('controller');
$serverHost=$\u服务器[“HTTP\u主机”];
#…实现您的应用程序逻辑…使用开关或其他

e->getTarget()->layout('layout/layout');//我在我的模块(Module.php)中做这种事情.在bootstrap方法中,我首先触发setLayout方法。但首先我需要在模板映射中设置布局。然后我可以根据路由、控制器、主机等更改布局。我根据特定模式构建路由,以便对它们进行逻辑分组。;)

bootstrap上的公共函数(MvcEvent$e)
{
$app=$e->getParam('application');
$app->getEventManager()->附加(
“调度”,数组(
美元这个,
“设置布局”
));
}
公共功能设置布局(MvcEvent$e)
{
$matches=$e->getRouteMatch();
$routeName=$matches->getMatchedRouteName();
$controller=$matches->getParam('controller');
$serverHost=$\u服务器[“HTTP\u主机”];
#…实现您的应用程序逻辑…使用开关或其他

e->getTarget()->layout('layout/layout');//听起来像是一个计划,但其他域需要自己的控制器?通常,整个项目独立于通过Web服务器调用php代码的域。如果在同一个zf2项目中有两个域路由,则可以检测域并决定加载哪个布局。但这意味着我需要一个不同的控件宽容?举个例子就好了,我也很困惑。这听起来是一个非常好的计划,我认为这是无效的,很高兴看到。但是您对不同路由的看法是可以讨论的。当加载domain2.com/foo2而不是默认的/foo时,我可能需要为某个域加载另一个控制器一次。如何使用视图以正确的方式进行此操作?我看到了第三个版本;)谢谢!抱歉,这让我感到困惑;)做吗main2.com/foo2,domain1.com/foo,这取决于路由配置,同样可以忽略域。通常这些路由会以Foo2Controller::indexAction()和FooController::indexAction()结束。或者你的意思是,/foo2和/foo在相同的控制器操作中被路由?这实际上取决于路由配置和您需要的详细信息。听起来像一个计划,但其他域需要自己的控制器?通常,整个项目独立于通过Web服务器调用php代码的域。如果您有例如2个doma在同一个zf2项目中的ins路由中,您可以检测域并决定加载哪个布局。但这意味着我需要一个不同的controllerAction?有一些例子会很好,但我对此感到困惑。这听起来像是一个非常好的计划,我认为这是“无效的”,很高兴看到。但是您对不同路由的看法是可以讨论的。当加载domain2.com/foo2而不是默认的/foo时,我可能需要为某个域加载另一个控制器一次。如何使用视图以正确的方式进行此操作?我看到了第三个版本;)谢谢!抱歉,这让我感到困惑;)做吗main2.com/foo2,domain1.com/foo,根据路由配置,同样可以忽略域。通常这些路由会以Foo2Controller::indexAction()和