ZF2:基于身份切换布局 - 使用哪个事件

时间:2014-02-25 22:46:24

标签: layout model-view-controller zend-framework2

到目前为止,我的应用程序中只有一个布局,在module.config.php中配置如下:

  'view_manager' => array(
        'template_map' => array(
            'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
        ),

我现在正在尝试根据用户是否登录来切换布局。我的Core\Auth服务中提供了此信息,我在module.php中使用了该信息,如下所示:

public function onBootstrap(MvcEvent $e)
{
        ...

        $eventManager->attach('dispatch', function ($e) {
        $application = $e->getApplication();
        $auth = $application->getServiceManager()->get('Core\Auth');

        if (!$auth->isLoggedIn()) {
            $viewModel = $e->getViewModel();
            $viewModel->setTemplate('layout/public');
        }
    }, -1000000);
}

问题是我不知道将哪个事件附加到哪个事件以及使用哪个事件。如果我把它附在:...

  • ...引导程序或路由事件,它被覆盖
  • ...具有高优先级的调度事件被覆盖
  • ...具有低优先级的调度事件,它会覆盖控制器操作可能进行的任何布局更改,例如: $视图 - > setTerminal(真)
  • ...渲染事件,(再次)它覆盖了动作所做的更改

我应该把它附在哪里?有什么优先权?

1 个答案:

答案 0 :(得分:0)

Opps,我的错误。

我在我的索引/索引操作中进行了相同的isLoggedIn()测试,这使得结果变得混乱。我删除了它并将布局开关附加到路由事件,默认优先级,到目前为止它工作正常!