У меня есть некоторые проблемы с возвратом объекта paginator в виде коллекции HAL json. Я использую последние версии zend-expressive и zend-expressive-hal.
Это настройка из моего ConfigProvider:
public function __invoke() : array
{
return [
'dependencies' => $this->getDependencies(),
MetadataMap::class => $this->getHalConfig(),
];
}
public function getHalConfig() : array
{
return [
[
'__class__' => RouteBasedCollectionMetadata::class,
'collection_class' => RoleCollection::class,
'collection_relation' => 'user_roles',
'route' => 'api.user.roles',
],
];
}
И это мои методы обработчика:
public function get(ServerRequestInterface $request) : ResponseInterface
{
// read some records from the database
$select = new Select();
$select->from(['r' => 'user_roles']);
$select->columns(['id', 'name']);
$paginator = new RoleCollection(new DbSelect($select, $this->dbAdapter));
$paginator->setItemCountPerPage(25);
$paginator->setCurrentPageNumber(1);
return $this->createResponse($request, $paginator);
}
private function createResponse(ServerRequestInterface $request, $instance) : ResponseInterface
{
return $this->responseFactory->createResponse(
$request,
$this->resourceGenerator->fromObject($instance, $request)
);
}
Класс RoleCollection является только наследником Paginator:
class RoleCollection extends Paginator
{
}
Сообщение об ошибке, которое я получаю:
Cannot generate Zend\Expressive\Hal\HalResource for object of type ArrayObject; not in metadata map