如何使布局依赖于域,而不是模块?

时间:2013-06-27 12:46:58

标签: zend-framework2

我有一个应用程序,其中有几个子域。我重定向到基于域的模块。每个模块都有不同的布局。基于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

与同一模块相关联

但是,我会保留与域关联的模块布局。

当然我有一些解决这个问题的黑客的想法,但我对是否有“干净”的解决方案感兴趣。

1 个答案:

答案 0 :(得分:1)

我使用的肮脏黑客。:

  • 我有模块终端有自己的布局。并与自己联系 域(路由类型Zend \ Mvc \ Router \ Http \ Hostname)
  • 我有模块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);
}

并且一如既往地抱歉我的英语......