Zend Framework 2 设置全局模块变量

Posted

技术标签:

【中文标题】Zend Framework 2 设置全局模块变量【英文标题】:Zend Framework 2 set global module variable 【发布时间】:2013-08-28 18:45:45 【问题描述】:

我想让变量“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 中的用户...

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

【问题讨论】:

【参考方案1】:

使用 Config-Variables 使东西在应用程序范围内可用。

// 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'];

希望它足够清楚。

【讨论】:

是的,但我认为我不能在这种情况下使用配置变量,因为我正在调用服务以获取我需要使用的变量,而不是让它“准备好” ”。还是我在这里遗漏了什么? 如果你有一个服务,这个服务无论如何都可以在所有模块中访问。没有办法让一个变量随处可用(布局、控制器、服务类等...) 是的,但是我想避免每次都将变量传递给视图,我的意思是如果我需要一个变量在整个控制器中使用,我必须在每个动作中传递它不太干。这就是我的问题背后的全部想法。 我想最干净的方法是 ViewHelper。 $this->userIdentity() 或类似的东西。【参考方案2】:

您是否尝试过 $this->user in view 我认为这应该可行。

【讨论】:

【参考方案3】:

在 Zend Framework 2 中有一个内置的视图助手,称为“Identity”,它在所有视图中都可用。它要求您像这样在 config.module.php 中注册服务管理器:

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

然后在视图中,您可以像这样访问您注册的“用户”:

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

这将返回您的用户。这是link to the zend documentation

【讨论】:

以上是关于Zend Framework 2 设置全局模块变量的主要内容,如果未能解决你的问题,请参考以下文章

Zend Framework2如何建立新的模块

在Zend Framework 2或3中,模块名称可以与类名相同吗?

带有 Zend Framework 2 模块的 PHPUnit

zend framework 2 + phpunit + 多模块 + 持续集成

Zend 2 Framework - Doctrine从给定的2个实体生成表

无法在Zend Framework中设置postDispatch()中的视图变量