namespace Auth; use Zend\ModuleManager\ModuleManager; class Module { public function init(ModuleManager $moduleManager) { $sharedEvents = $moduleManager->getEventManager()->getSharedManager(); $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) { echo "I am init module dispatch"; exit(); }, 100); } }
$moduleManager->getEventManager()->getSharedManager()->attach()
отлично работает в ZF2 BETA5, но не работает в стабильной финальной версии.
Выключена ли эта функция в финальном выпуске?
Как я могу сделать эту работу в финальной версии ZF2?
public function onBootstrap(MvcEvent $e) { $application = $e->getApplication(); $sharedManager = $application->getEventManager()->getSharedManager(); $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) { echo "I am init module dispatch"; exit(); }, 100); }
В бета-серии zend framework2
Auth\src\User\Controller\UserController.php
но в финальном выпуске zf2 это не сработает. Основная папка пространства имен должна совпадать точно так же, как в папке src. так что выше будет работать только так
Auth\src\Auth\Controller\UserController.php or User\src\User\Controller\UserController.php
Не забудьте изменить пространства имен и пути в файлах module.php и module.config.php и контроллера.
Есть два пути:
Вы можете получить его из метода init.php init, передав ему объект ModuleManger, а затем modulemanager-> getEventManager.
Или из метода onBootstrap снова в Module.php, но не из ModuleManager, а с помощью объекта приложения, как это делал Абдул.
Помните, что для каждого запроса страницы запускаются методы init и onBoostrap. Регистрация событий там хорошо, но не кладите туда тяжелые вещи. Я предпочитаю sharedEventManager, поскольку он доступен, даже если служба инициализируется в будущем.
Ура!