我正在构建一个RESTful API,我遇到了问题。
目标: 我想给一个来自Paginator的系列保湿。 我的意思是,在集合中,我不想返回一个Project对象,我想返回一个HalCollection的HalResources。要创建这些HalResources,我需要使用Project对象(以及其他信息)。
情景: 我使用两种方法创建了一个实现HydratorInterface的ProjectHydrator类:
class ProjectHydrator implements HydratorInterface {
public function hydrate(array $data, $project){ .... }
public function extract($project) { .... }
}
我将这个Hydrator连接到我的模块,在module.config.php
中'phlyrestfully' => array (
'renderer' => array (
'hydrators' => array (
'MYPROJECT\Entity\Project' => new \MYPROJECT\Hydrators\ProjectHydrator()
)
),
......
)
并且侦听器方法的fetchAll以这种方式创建分页:
$dql = 'SELECT e FROM \MYPROJECT\Entity\Project e';
$query = $this->getEntityManager()->createQuery($dql); // Class: \Doctrine\ORM\Query
$ormPaginator = new \Doctrine\ORM\Tools\Pagination\Paginator($query); //Class: Doctrine\ORM\Tools\Pagination\Paginator
$doctrinePaginator = new \DoctrineORMModule\Paginator\Adapter\DoctrinePaginator($ormPaginator); //Class: DoctrineORMModule\Paginator\Adapter\DoctrinePaginator
$paginator = new \Zend\Paginator\Paginator($doctrinePaginator); //Class: Zend\Paginator\Paginator
return $paginator;
问题:正在执行保护器...但是被称为方法“extract”,参数是Project对象。在这个方法中我必须返回和数组,这是我的问题,我想返回一个HalResource,而不是一个数组。
我想使用水化器来改变对象的类型,从Project对象(项目实体对象)到HalResource。要构建这个HalResource,我想使用Project对象加上一个包含其他参数的数组。
我做错了什么? 有什么想法吗?
非常感谢!
答案 0 :(得分:2)
无需扩展Doctrine Paginator
,只需将查询水合模式设置为水合阵列模式。
use Doctrine\ORM\Query;
use Doctrine\ORM\Tools\Pagination\Paginator as OrmPaginator;
use DoctrineORMModule\Paginator\Adapter\DoctrinePaginator;
use Zend\Paginator\Paginator;
$dql = 'SELECT e FROM \MYPROJECT\Entity\Project e';
$query = $this->getEntityManager()->createQuery($dql);
//Set query hydration mode
$query->setHydrationMode(Query::HYDRATE_ARRAY);
$ormPaginator = new OrmPaginator($query);
$doctrinePaginator = new DoctrinePaginator($ormPaginator);
$paginator = new Paginator($doctrinePaginator);
return $paginator;
希望它有所帮助。