如何从 Zend Framework 3 中的视图脚本访问服务?

How to access services from a view script in Zend Framework 3?

我有一个自定义身份验证服务,在 ZF2 中我按如下方式访问它:

Application/view/layout/layout.phtml

$authenticationService = $this->getHelperPluginManager()
    ->getServiceLocator()
    ->get('AuthenticationService');
$currentIdentity = $authenticationService->getIdentity();

现在 Zend\ServiceManager#getServiceLocator() 已弃用。

如何在 ZF3 的视图脚本(或本例中的布局中的具体内容)中获取服务?

解决方法是在onBootstrap(...)中分配一个全局视图变量:

namespace Application;
use ...
class Module
{

    public function onBootstrap(MvcEvent $e)
    {
        ...
        $serviceManager = $e->getApplication()->getServiceManager();
        $viewModel = $e->getApplication()->getMvcEvent()->getViewModel();
        $viewModel->authenticationService = $serviceManager->get('AuthenticationService');
    }
    ...
}

另一个(可能是偶数 better/cleaner)解决方案是使用 ViewHelper。另见 here

为此,已经有 Identity View Helper

如文档所述

// Use it any .phtml file
// return user array you set in AuthenticationService or null
$user = $this->identity();