gpt4 book ai didi

php - 使用 ZendFramework 2 + Doctrine 2 在分页集合中使用水合器更改对象类型

转载 作者:搜寻专家 更新时间:2023-10-31 21:10:57 25 4
gpt4 key购买 nike

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

目标:我想给一个来自分页器的集合补水。我的意思是,在集合中,我不想返回一个 Project 对象,我想返回一个 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;

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

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

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

非常感谢!

最佳答案

无需扩展 Doctrine Paginator,只需将查询水化模式设置为水化数组模式即可。

use Doctrine\ORM\Query;
use Doctrine\ORM\Tools\Pagination\Paginator as DoctrinePaginator;
use DoctrineORMModule\Paginator\Adapter\DoctrinePaginator as PaginatorAdapter;
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);

$paginator = new Paginator(new PaginatorAdapter(new DoctrinePaginator($query)));

return $paginator;

希望对您有所帮助。

关于php - 使用 ZendFramework 2 + Doctrine 2 在分页集合中使用水合器更改对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19537961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com