Zend Framework 2 REST API

У меня небольшая проблема. Я новичок в 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;
}
}

Кто-нибудь знает решение для этого?

Большое спасибо!

0

Решение

Интерфейс реализует 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);
}
0

Другие решения

Других решений пока нет …