我在将分页器对象作为 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