2017-07-21 5 views
1

私のアプリケーションでは、既存のモジュールを使用して別のドメインに基づいていくつかの異なるビューをロードするアプリケーションがあります。ZF2はドメインに基づいて別のビューを読み込みます

私のレイアウトを変更したいだけなので、自分のvriewsに関与する必要があります。 ZF2で

+0

有用であれば1つの回答を受け入れることを忘れないでください。他の読者も同じ問題に直面しています) – BenRoob

答えて

0

第一パート

あなたは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部

Webサーバの設定(nginxのは、Apache)を介して

:あなたはあなたのサーバー上の同じソースコードディレクトリ(あなたのZF2-プロジェクト)を指している2つのドメインを持っている3210

、両方のリクエストがIndexControllerにルーティングされます(例:アプリケーションモジュールで)。デフォルトでは、ルートはサーバーの名前(ホスト名)に依存しません。またはより良いと言えば、そのドメイン。 FYI、あなたは特定のホスト名のルートを設定できますが、これは話題にならないでしょう;)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

一般に、プロジェクト全体は、WebサーバーからPHPコードが呼び出されるドメインとは独立しています。たとえば、同じzf2プロジェクトで2つのドメインルーティングを使用すると、ドメインを検出して読み込むレイアウトを決定できます。 – BenRoob

+0

しかし、それは私がそれに対して別のコントローラを必要としていることを意味しますか?私はそれについて混乱しているだけでなく、素晴らしいかもしれないいくつかの例があります。 – 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

関連する問題