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 Framework 2或3中,模块名称可以与类名相同吗?
带有 Zend Framework 2 模块的 PHPUnit
zend framework 2 + phpunit + 多模块 + 持续集成