Как получить доступ к сервисам из скрипта вида в 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(); 
Другие вопросы по тегам