我一直在关注在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
如果有人能够解释可能导致问题的原因,我将非常感激。
提前致谢
戴夫
答案 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);
}