Как получить доступ к сервисам из скрипта вида в Zend Framework 3?
У меня есть специальная служба аутентификации, и в ZF2 я получил доступ к ней следующим образом:
Application/view/layout/layout.phtml
$authenticationService = $this->getHelperPluginManager()
->getServiceLocator()
->get('AuthenticationService');
$currentIdentity = $authenticationService->getIdentity();
Теперь Zend\ServiceManager#getServiceLocator()
устарела.
Как сделать сервис доступным в скрипте вида (или конкретном в данном случае в макете) в ZF3?
2 ответа
Решение
Решение состоит в том, чтобы назначить глобальную переменную представления в 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');
}
...
}
Другое (возможно, даже лучшее / более чистое) решение заключается в использовании ViewHelper
, Смотрите также здесь.
Для этого уже есть Identity View Helper
Как сказано в документации
// Use it any .phtml file
// return user array you set in AuthenticationService or null
$user = $this->identity();