2017-07-21 62 views
1

我有一個應用程序,我想要加載一些不同的視圖,基於不同的域使用我的應用程序中的現有模塊,我怎麼能在我的路線中完成?ZF2加載基於域的不同視圖

我只想改變我的佈局,所以我的vriews應該只涉及。

+0

如果有幫助,請不要忘記接受一個答案。其他讀者會喜歡它,面臨同樣的問題;) – BenRoob

回答

0

第1部分

在ZF2您可以在ActionControllers改變佈局:

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

    return $viewModel; 
} 

因此,你必須加入module.config.php一個條目(view_manager部分):

//... configs 
'view_manager' => array(
    // other configs... 
    'template_map' => array(
     'layout/layout' => 'path to default layout', 
     'layout/customLayout' => 'path to custom layout', 
    ), 
), 

第2部分

你有你的服務器上的兩個域名指向同一個源代碼目錄(您ZF2項目):

通過Web服務器配置(nginx的,阿帕奇) ,這兩個請求將被路由到一個IndexController(例如在應用程序模塊中)。默認情況下,路由不依賴於服務器的名稱(主機名)。或者更好地說:它的領域。僅供參考,您可以爲特定的主機名配置路由,但這是無關緊要的;)Web服務器會更改PHP的某些環境變量,例如, $_SERVER取決於呼叫域。在這個php數組中,您可以檢測當前服務器名稱等細節。在應用程序\控制器\的IndexController 檢測這樣的:

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

聽起來像一個計劃,但其他領域需要他們自己的控制器? – Matt

+0

一般來說,整個項目獨立於你的php代碼通過web服務器調用的域。如果你有例如2個域在同一個zf2項目中進行路由,您可以檢測域並決定要加載哪個佈局。 – BenRoob

+0

但這意味着我需要一個不同的controllerAction嗎?有些例子會讓人感覺很好,我也很困惑。 – Matt

0

我做這種東西在我的模塊(Module.php)。在引導方法中,我首先觸發setLayout方法。但首先我需要在template_map中設置我的佈局。然後,我可以根據路線,控制器,主機等更改佈局。我按照特定模式構建路線以便按邏輯分組。 ;)

public function onBootstrap(MvcEvent $e) 
{ 
    $app = $e->getParam('application'); 

    $app->getEventManager()->attach(
     'dispatch', array(
     $this, 
     'setLayout' 
    )); 
} 
public function setLayout(MvcEvent $e) 
{ 
    $matches = $e->getRouteMatch(); 
    $routeName = $matches->getMatchedRouteName(); 
    $controller = $matches->getParam('controller'); 
    $serverHost = $_SERVER["HTTP_HOST"]; 
    # ... Implement your application logic ...use Switch or sth. ...# 
    e->getTarget()->layout('layout/layout'); // <-- based on host and your logic 
} 
+0

這段代碼封裝在哪裏? – jkushner

+0

哦,對不起,忽略它!它位於Module.php中 – MuratBa