3

複数のサブドメインがあるアプリケーションがあります。ドメインに基づいてモジュールにリダイレクトします。各モジュールのレイアウトは異なります。evandotpro/edp-module-layouts に基づいています:

public function onBootstrap($e)
{
     $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) {
     ... 
     ... 

さらに、私は認証モジュールを持っています - それはグローバルです。

client.app.com/auth/login
handheld.app.com/auth/login

同じモジュールに関連付けられている

ただし、ドメインに関連付けられたモジュールのレイアウトは維持します。

もちろん、この問題を解決するいくつかのハックのアイデアがありますが、「クリーンな」解決策があるかどうかに興味があります。

4

1 に答える 1

1

私が使用した汚いハック.:

  • 独自のレイアウトを持つモジュール Terminal があります。独自のドメインに接続 (ルートタイプ Zend\Mvc\Router\Http\Hostname )
  • アプリケーション全体に承認を追加し、ログインページにリダイレクトするモジュール Auth があります
    • したがって、許可されていない場合、端末モジュールにアクセスしようとすると、次の場所にリダイレクトされます。
    • http://terminal.example.com/login (Auth モジュールに接続されたルート)

そのような状況で端末レイアウトを強制するには、Terminal Module.php を追加します。

public function onBootstrap(MvcEvent $e)
{
    $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) {
        $controller      = $e->getTarget();
        $controllerClass = get_class($controller);
        $moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\'));

        if ($_SERVER['HTTP_HOST'] == 
                $e->getApplication()->getServiceManager()->get('config')['router']['routes']['terminal']['options']['route']
                && $moduleNamespace=='Auth') { 
            $controller->layout('layout/terminal');
        }
    }, 1);
}

そして、いつものように、私の英語で申し訳ありません...

于 2013-07-17T06:21:48.720 に答える