У меня небольшая проблема. Я новичок в Zend Framework 2, и я хотел создать REST-сервис с ним.
Я последовал его уроку: http://www.slideshare.net/mikestowe/building-a-rest-api-with-zend-framework-2
Проблема в том, что я получаю сообщение об ошибке, и я не нашел его в Google.
Неустранимая ошибка: объявление Application \ Controller \ UserController :: setEventManager () должно быть совместимо с Zend \ EventManager \ EventManagerAwareInterface :: setEventManager (Zend \ EventManager \ EventManagerInterface $ eventManager) в C: \ wamp \ www \ zf2rest \ module \ Application \ src \ Application \ Controller \ UserController.php в строке 15
Это мой UserController:
namespace Application\Controller;
use Zend\Mvc\Controller\AbstractRestfulController;
use Zend\View\Model\JsonModel;
class UserController extends AbstractRestfulController {
protected $collectionOptions = array('GET', 'POST');
protected $resourceOptions = array('GET', 'POST', 'DELETE');
protected function _getOptions() {
if($this->params->fromRoute('id', false)) {
// we have an id, return specific item
return $this->resourceOptions;
}
//no ID, return collection
return $this->collectionOptions;
}
public function options() {
$response = $this->getResponse();
//If in Options Array, Allow
$response->getHeaders()
->addHeaderLine('Allow', implode(',', $this->_getOptions()));
//return Response
return $response;
}
public function setEventManager(EventManagerInterface $events) {
//events propery defined in AbstractController
$this->events = $events;
//Register the listener and callback method with a priority if 10
$events->attach('dispatch', array($this, 'checkOptions'), 10);
}
public function checkOptions($e) {
if(in_array($e->getRequest()->getMethod(), $this->_getOptions())) {
//Method Allowed, Nothing to do
return;
}
//Method Not Allowed
$response = $this->getResponse();
$response->setStatusCode(405);
return $response;
}
}
Кто-нибудь знает решение для этого?
Большое спасибо!
Интерфейс реализует setEventManager :: $ events — это класс, реализующий интерфейс Zend \ EventManager \ EventManagerInterface; однако вы нарушили это, поскольку EventManagerInterface — это просто псевдоним полного имени класса.
Вы можете избежать этого, используя полное имя класса
public function setEventManager(\Zend\EventManager\EventManagerInterface $events);
Кроме того, сохраните то, что у вас есть, и просто добавьте псевдоним пространства имен в верхней части класса.
<?php
namespace Api/Controller;
use Zend\EventManager\EventManagerInteface;
Что действительно важно, так это убедиться, что вы вызываете родительский setEventManager (), в противном случае вся конфигурация по умолчанию перегружена, просто посмотрите, что еще установлено.
public function setEventManager(EventManagerInterface $events)
{
parent::setEventManager($events);
$events->attach('dispatch', array($this, 'checkOptions'), 10);
}
Других решений пока нет …