Zend Framework 2设置全局模块变量


Zend Framework 2 set global module variable

我想让变量"user"对所有模块都是全局的,所以我添加了这个代码

public function onBootstrap(MvcEvent $e)
{
    $eventManager        = $e->getApplication()->getEventManager();
    $e->getViewModel()->setVariable('user',$e->getApplication()->getServiceManager()->get('auth_service')->getIdentity());
}

它对布局文件很好,这意味着如果我在layout.phtml中执行var_dump($user),它将输出预期的结果,尽管在中执行相同结果的视图中

注意:未定义的变量:C:''webserver''apache''htdocs中的user。。。

为什么会发生这种情况,有什么帮助吗?我做错什么了吗?

使用配置变量使stuff在应用程序范围内可用。

// module.config.php
return array(
    'someVariable' => 'someValue',
    // all the other stuff
);

你所要做的就是访问配置。当然,访问权限因您尝试访问的位置而异,但最终是这样做的:

// Example for being inside any of your Controllers
$servoceLocator = $this->getServiceLocator();
$config         = $serviceLocator->get('config');
$myValue        = $config['someVariable'];

希望它足够清楚。

您在视图中尝试过$this->用户吗?我认为这应该有效。

在Zend Framework 2中,有一个名为"Identity"的内置视图帮助程序,在所有视图中都可用。它要求您在config.module.php中注册服务管理器,如下所示:

'service_manager' => array(
    ...
    'invokables' => array(
        ...
        'Zend'Authentication'AuthenticationService' => 'Zend'Authentication'AuthenticationService',
    ),
)

然后在视图中,您可以访问您的注册"用户",如下所示:

<?php echo $this->identity()?>

这将返回您的用户。以下是zend文档

的链接