3

Zend\Authentication\AuthenticationService用来管理当前登录的用户。现在我希望实体对象默认在所有 ViewModel 中可用,而不必在每个控制器操作中分配用户对象。

有没有很好的方法来做到这一点?还是我需要为 ViewModels 创建一个工厂并从那里注入用户的身份?在那种情况下,每次我想创建一个 ViewModel 时,我都必须使用 ServiceManager,这不是很性感。

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

4

3 回答 3

4

受到 Ocramius 和 Bram 答案的启发,我深入研究了 ZF View Helpers。tadaa:事实证明,ZF2 已经带有一个 Helper 来访问任何 View Model 中的用户身份。View Helper 简称为identity

为了让它工作,你需要添加Zend\Authentication\AuthenticationService到可调用类的列表中(不知道,为什么这不是默认的),例如在你的config/autoload/global.php中:

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

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

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

再次感谢 Ocramius 让我走上正轨!如果您不使用 Zend\Authentication\AuthenticationService 他的回答仍然适用。

于 2013-02-16T02:09:57.977 回答
2

看看它是怎么ZfcUser做的。它允许视图助手访问身份验证服务,而不是在所有视图中注入身份变量。

为此,身份验证服务通过服务工厂注入到视图助手中。

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

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

echo $user ? $user->getUsername() : 'Not logged in!';
于 2013-02-15T22:16:54.570 回答
0

您应该创建一个视图助手,从身份验证服务中检索用户模型。以 ZfcUser视图助手为例。也许您可以将 ZfcUser 模块用于您的用例。

于 2013-02-15T22:15:48.223 回答