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

我使用的肮脏黑客。:

  • 我有自己布局的模块终端。并与自己的域连接(路由类型 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);
}

和往常一样,对不起我的英语......

于 2013-07-17T06:21:48.720 回答