3 php pagination doctrine-orm zend-framework2
我正在构建 RESTful API,但遇到了问题。
目标: 我想要水合来自分页器的集合。我的意思是,在集合内部,我不想返回 Project 对象,我想返回HalResources 的HalCollection。为了创建这些 HalResources,我需要使用 Project 对象(加上附加信息)。
场景: 我创建一个类 ProjectHydrator,它实现HydratorInterface,具有两种方法:
class ProjectHydrator implements HydratorInterface {
public function hydrate(array $data, $project){ .... }
public function extract($project) { .... }
}
Run Code Online (Sandbox Code Playgroud)
我将此 Hydrator 附加到我的模块,位于 module.config.php 内
'phlyrestfully' => array (
'renderer' => array (
'hydrators' => array (
'MYPROJECT\Entity\Project' => new \MYPROJECT\Hydrators\ProjectHydrator()
)
),
......
)
Run Code Online (Sandbox Code Playgroud)
侦听器方法的 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;
Run Code Online (Sandbox Code Playgroud)
问题:水化器正在执行...但被称为方法“extract”,参数为 Project 对象。在这个方法中我必须返回一个数组,这是我的问题,我想返回一个 HalResource,而不是一个数组。
我想使用 Hydrator 来更改对象的类型,从 Project 对象(项目实体对象)更改为 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;
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。