$ moduleManager-> getEventManager() - > getSharedManager() - > attach无法在稳定的zf2中运行

时间:2012-09-13 12:40:05

标签: php zend-framework2

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最终版本中完成这项工作?

3 个答案:

答案 0 :(得分:1)

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);
}

答案 1 :(得分:0)

在Beta系列的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以及控制器文件中的命名空间和路径。

答案 2 :(得分:0)

有两种方法,

您可以从Module.php init方法获取它,方法是将ModuleManger对象传递给它,然后再传递给modulemanager-> getEventManager。

或者从Module.php中再次使用onBootstrap方法,但不是来自ModuleManager,而是来自Abdul所做的应用程序对象。

请记住,init和onBoostrap方法针对每个页面请求运行。注册活动没关系,但不要把重物放在那里。我更喜欢sharedEventManager,因为它可用,即使服务将来初始化。

干杯!