Zend framework2 所有ViewModels中的用户标识

Zend framework2 所有ViewModels中的用户标识,zend-framework2,Zend Framework2,我使用Zend\Authentication\AuthenticationService管理当前登录的用户。现在,我希望实体对象在默认情况下在所有ViewModels中都可用,而不必在每个控制器操作中指定用户对象 有什么好办法吗?或者我需要为ViewModels创建一个工厂并从那里注入用户的身份吗?在这种情况下,每当我想创建ViewModel时,我都必须使用ServiceManager,这不是很吸引人 还有更优雅的方式吗?我是否可以直接从ViewModel(即模板)中访问Authenticati

我使用
Zend\Authentication\AuthenticationService
管理当前登录的用户。现在,我希望实体对象在默认情况下在所有ViewModels中都可用,而不必在每个控制器操作中指定用户对象

有什么好办法吗?或者我需要为ViewModels创建一个工厂并从那里注入用户的身份吗?在这种情况下,每当我想创建ViewModel时,我都必须使用ServiceManager,这不是很吸引人


还有更优雅的方式吗?我是否可以直接从ViewModel(即模板)中访问AuthenticationService?

您应该创建一个视图帮助器,从authentication service检索用户模型。 以ZfcUser为例。 也许您可以将ZfcUser模块用于您的用例。

看看它是如何实现的。它允许用户访问身份验证服务,而不是在所有视图中注入标识变量

为此,身份验证服务被注入到视图帮助器中

这基本上允许您在任何视图脚本中使用以下内容:

echo $user = $this->zfcUserIdentity();

echo $user ? $user->getUsername() : 'Not logged in!';

受奥克拉米乌斯和布拉姆答案的启发,我深入研究了ZF视图助手。tadaa:事实证明,ZF2已经提供了一个助手,可以在任何视图模型中访问用户身份。视图辅助对象仅称为
identity

但为了使其正常工作,您需要将
Zend\Authentication\AuthenticationService
添加到可调用类列表中(没有线索,为什么这不是默认值),例如在config/autoload/global.php中:

之后,您可以从任何模板轻松访问当前用户的身份:

<p>Hello <?php echo $this->identity()->getName() ?></p>
你好


再次感谢奥克拉米乌斯让我走上正轨!如果您不使用Zend\Authentication\AuthenticationService,他的答案仍然适用。

ZfcUser的身份验证服务仍然是
Zend\Authentication\AuthenticationService
btw;)
<p>Hello <?php echo $this->identity()->getName() ?></p>