служба аутентификации zend framework 2


В моем модуле есть два контроллера, и оба они должны видеть, вошел ли пользователь в систему или нет. Контроллеры входа аутентифицируют пользователя с помощью DbTable и записывают идентификатор в хранилище.

Я использую >Zend\Аутентификация\Служба аутентификации; $auth =новая служба аутентификации();

Внутри функции контроллера, но затем я создаю ее экземпляр на нескольких страницах()

Для этого я написал функцию в Module.php

Как следует

public function getServiceConfig()
    {
        return array(
            'factories' => array(
                'Application\Config\DbAdapter' => function ($sm) {
                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                    return $dbAdapter;
                },
                 'Admin\Model\PagesTable' => function($sm){
                     $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                     $pagesTable = new PagesTable(new TableGateway('pages',$dbAdapter) );
                    return $pagesTable;
                },
                'Admin\Authentication\Service' => function($sm){
                    return new AuthenticationService();

                }
            ),
        );
    }

Как вы можете видеть, я возвращаю новый AuthenticationService() каждый раз, когда я думаю, что это плохо. Я не смог найти, как захватить уже созданный экземпляр службы, или мне нужно написать для этого одноэлементный класс. Пожалуйста, сообщите, что любые примеры снипов кода с более глубоким объяснением будут высоко оценены и оценены, спасибо.

Author: Jani Pitscutecy, 2012-12-07

1 answers

Попробуйте вместо этого:

public function getServiceConfig()
{
    return array(
        'aliases' => array(
            'Application\Config\DbAdapter' => 'Zend\Db\Adapter\Adapter',
            'Admin\Authentication\Service' => 'Zend\Authentication\AuthenticationService',
        ),
        'factories' => array(
            'Admin\Model\PagesTable' => function ($serviceManager) {
                 $dbAdapter    = $serviceManager->get('Application\Config\DbAdapter');
                 $tableGateway = new TableGateway('pages', $dbAdapter);
                 $pagesTable   = new PagesTable($tableGateway);
                 return $pagesTable;
             },
        ),
    );
}

Обратите внимание, в основном, на раздел "псевдонимы" корневого массива, любые другие изменения носят косметический характер, и вы можете предпочесть использовать предложенный вами оригинальный способ (например, использовать фабрику для извлечения экземпляра Zend\Db\Adapter\Adapter вместо того, чтобы также использовать псевдонимы).

С уважением,

Ise

 2
Author: ise, 2012-12-07 18:20:42