3

我正在构建一个 RESTful API,但我遇到了问题。

目标: 我想为来自 Paginator 的集合添加水分。我的意思是,在集合内部,我不想返回 Project 对象,我想返回HalResources的 HalCollection。要创建这些 HalResources,我需要使用 Project 对象(加上其他信息)。

场景: 我创建了一个类 ProjectHydrator,它实现了HydratorInterface,有两种方法:

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;

问题:水合器正在执行......但被称为方法“提取”,参数为项目对象。在这个方法中我必须返回和数组,这是我的问题,我想返回一个 HalResource,而不是一个数组。

我想使用 hydrator 将对象的类型从 Project 对象(项目实体对象)更改为 HalResource。为了构建这个 HalResource,我想使用 Project 对象加上一个带有其他参数的数组。

我做错了什么?有任何想法吗?

非常感谢!

4

1 回答 1

4

无需扩展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;

希望能帮助到你。

于 2015-03-18T22:37:13.603 回答