Я реализованного Zend Auth путем создания getServiceConfig()
-как AuthenticationService
объекта в Module.php
:Как использовать Zend Auth, чтобы сделать значения глобально доступны в каждом действии и layout.phtml
'AuthService' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$dbTableAuthAdapter = new DbTableAuthAdapter($dbAdapter, 'tblUSRUsers', 'Email', 'Password', "MD5(?)");
$authService = new AuthenticationService();
$authService->setAdapter($dbTableAuthAdapter);
$authService->setStorage($sm->get('Application\Model\MyAuthStorage'));
return $authService;
},
В действии контроллера, я получение этого объекта по
$this->getServiceLocator()
->get('AuthService');
Для проверки подлинности я получить значение с помощью
$authservice = $this->getServiceLocator()->get('AuthService');
$arrUserDetails = $authservice->getIdentity();
Его рабочие характеристики, эти значения доступны.
Но проблема в том, что ServiceLocator
не доступен в конструкторе контроллера, поэтому не может написать выше код. Написание этого кода в каждом действии, похоже, не является хорошей практикой. Может ли кто-нибудь помочь в этом?
Предположим, что я должен пройти. Записал имя пользователя в layout.phtml. Я хочу установить эту информацию через конструктор для Layout. Но, $ this-> getEvent() -> getParam ('userinfo'); также недоступно в конструкторе. Поэтому, заставляя меня вкладывать его в каждое действие. – Bhuvi
Если вам это нужно в макете, то положите его туда. См. Мое обновление. – akond
Спасибо. Я также хочу перенаправить пользователя на страницу входа в систему, если он не аутентифицирован. Для этого я пишу if (! $ Auth-> hasIdentity()) { $ controller = $ e-> getTarget(); return $ controller-> plugin ('redirect') -> toRoute ('login'); } в функции onBootstrap.Но он показывает «Неустранимая ошибка: вызов неопределенного метода Zend \ Mvc \ Application :: redirect()» Не могли бы вы также указать, как это можно достичь? – Bhuvi