ZF2, с помощью ZFCUser -> с помощью диспетчера служб

Я устанавливаю ZfcUser в качестве модуля аутентификации. Модуль отлично работает, за исключением того, что мне приходится определять его заново при каждом действии:

$sm = $this->getServiceLocator();
$auth = $sm->get('zfcuser_auth_service');
if ($auth->hasIdentity()) {
    fb($auth->getIdentity()->getEmail());
}
else return $this->redirect()->toRoute('zfcuser');

Я попытался поместить код в конструкцию, но это не сработало. Затем я проверил диспетчер служб, но не смог правильно определить его во всех выпущенных версиях.

Это код из моего класса Module:

public function getServiceConfig() {
    return array(
        'factories' => array(
            'Todo\Model\TodoTable' =>  function($sm) {
                $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                $table = new TodoTable($dbAdapter);
                return $table;
            },
        ),
    );
}

Как правильно настроить сервис?


person Yossi    schedule 23.08.2012    source источник


Ответы (1)


Рассматривали ли вы плагин контроллера? Это позволило бы сократить эти шесть линий до одного звонка.

В противном случае другим более общим подходом было бы создание базового контроллера, который прикреплял бы событие «отправка». Мэтью Вейер О'Финни написал сообщение в блоге, демонстрирующее этот подход http://mwop.net/blog/2012-07-30-the-new-init.html под заголовком «События».

public function setEventManager(EventManagerInterface $events)
{
    parent::setEventManager($events);

    $controller = $this;
    $events->attach('dispatch', function ($e) use ($controller) {

        if (is_callable(array($controller, 'checkIdentity')))
        {
            call_user_func(array($controller, 'checkIdentity'));
        }
    }, 100);
}


public function checkIdentity()
{
    // Existing ZfcUser code
}
person DrBeza    schedule 24.08.2012