zf3 - вызов пользовательского плагина из Module.php

Я новичок в Zend Framework 3. И переношу свое приложение Zend Framework 2 на Zend Framework 3.

В настоящее время я пытаюсь вызвать userPlugin из файла Module.php модуля приложения.

Вот мой код,

public function onRoute(MvcEvent $e)
{
    $sm = $e->getApplication()->getServiceManager();
    $userPlugin = $sm->get('ControllerPluginManager')->get('userPlugin');
    $userPlugin->setServiceManager($e->getApplication()->getServiceManager());
    $checkLogin = $userPlugin->isLoggedIn();
}

И в моем module.config.php,

'controller_plugins' => array(
    //This is also not working
    //'invokables' => array(
    //    'userPlugin' => 'User\Controller\Plugin\UserPlugin',
    //),
    'factories' => [
        Controller\Plugin\UserPlugin::class => InvokableFactory::class,
    ],
    'aliases' => [
        'userPlugin' => Controller\Plugin\UserPlugin::class,
    ]
)

Но получить эту ошибку

Uncaught Zend\ServiceManager\Exception\ServiceNotFoundException: плагин с именем «UserPlugin» не найден в менеджере плагинов Zend\Mvc\Controller\PluginManager

Где я не прав?


person Keyur    schedule 23.02.2017    source источник
comment
ZF3 может быть немного более строгим в отношении ваших псевдонимов. Я совсем не уверен! Вы прописали его без заглавной буквы, а ваш module.php вызывает: UserPlugin. Было бы лучше использовать FQCN, например: ->get(\MyModule\Controller\Plugin\UserPlugin::class) вместо ->get('UserPlugin'). Не могли бы вы проверить, работает ли это?   -  person Kwido    schedule 23.02.2017
comment
@Kwido Я тоже пробовал с тобой решение. Но не работал для меня.   -  person Keyur    schedule 23.02.2017
comment
Можете ли вы показать класс Module.php или как вы присоединяетесь к событию route? Кроме того, ваш плагин работает в контроллере?   -  person SzymonM    schedule 23.02.2017
comment
Сообщение об ошибке и код, относящиеся к ->get('userPlugin'), не совпадают. UserPlugin (в сообщении об ошибке) не является userPlugin (как показано в вашем примере). @Kwido правильно, В ZF3 это вызовет у вас проблему так как имена служб являются литеральными строками. Вы уверены, что используете ->get('userPugin'), а не ->get('UserPlugin');.   -  person AlexP    schedule 23.02.2017


Ответы (1)


Используйте приведенный ниже код

 $sm = $e->getApplication()->getServiceManager();
 $checkLogin = $sm->get('ControllerPluginManager')
                  ->get(Controller\Plugin\UserPlugin::class)
                  ->isLoggedIn();
person Ohm    schedule 05.07.2017