Zf2 setEventManager问题

时间:2015-01-02 15:03:00

标签: php zend-framework zend-framework2

我一直在关注在Zend Framework 2中创建Restful应用程序的教程,所有这些都一直很顺利,直到我尝试按照tut中的描述实现此代码:



    public function setEventManager(EventManagerInterface $events)
    {
        $this->events = $events;
        // Register a listener at high priority
        $events->attach('dispatch', array($this, 'checkOptions'), 10);
    }




我收到以下错误:

  

致命错误:声明Api \ Controller \ WebsitesController :: setEventManager()必须与/ var / www / html / learnzf2 / public_html中的Zend \ EventManager \ EventManagerAwareInterface :: setEventManager(Zend \ EventManager \ EventManagerInterface $ eventManager)兼容第10行的/module/Api/src/Api/Controller/WebsitesController.php

该教程可在此处获取:https://www.zend.com/topics/ZF2REST-20130404.pdf

如果有人能够解释可能导致问题的原因,我将非常感激。

提前致谢

戴夫

1 个答案:

答案 0 :(得分:2)

接口强制setEventManager::$events是实现接口Zend\EventManager\EventManagerInterface的类;但是你已经打破了这个,因为EventManagerInterface只是完全限定类名的别名。

您可以使用完全限定的类名

来避免这种情况
public function setEventManager(\Zend\EventManager\EventManagerInterface $events);

或者,保留您拥有的内容,只需在类顶部添加名称空间别名。

<?php
    namespace Api/Controller;

    use Zend\EventManager\EventManagerInteface;

什么非常重要是确保您调用父setEventManager(),否则所有默认配置都会超载,just take a look at what else is set

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

    $events->attach('dispatch', array($this, 'checkOptions'), 10);
}