如何从 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();
我有一个自定义身份验证服务,在 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();