首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将knpPaginatorBundle与rest结合使用?

如何将knpPaginatorBundle与rest结合使用?
EN

Stack Overflow用户
提问于 2017-03-02 21:29:42
回答 2查看 4.6K关注 0票数 0

我试着使用

公共函数listeleAction(Request $request) { $em=$this->getDoctrine()->getManager();

代码语言:javascript
复制
    $yasam_list=$em->getRepository("VanBundle:Yasam")->findAll();

    if (count($yasam_list)>0)
    {
    $yanit=array();
    foreach ($yasam_list as $meta)
    {
        $new_yasam=array();
        $new_yasam['id']=$meta->getId();
        $new_yasam['adi']=$meta->getAdi();
        $new_yasam['adres']=$meta->getAdres();
        $new_yasam['kategori_id']=$meta->getKategori()->getAdi();
        array_push($yanit,$new_yasam);
    }
        $paginator=$this->get('knp_paginator');

        $result= $paginator->paginate(
            $yanit,
            $request->query->getInt('page',1),
            $request->query->getInt('limit',10)
        );

    }else{
        $yanit["success"] = 0;
  $response["message"] = "Bu kategoriye en kısa sürede veri eklenecektir. ";
    }

    $response=new Response(json_encode(array('yasamlar' =>$result),JSON_UNESCAPED_UNICODE));
    $response->headers->set('Content-type','application/json; charset=utf-8');
    $response->setStatusCode(200);
    return $response;
}

我的json输出

代码语言:javascript
复制
{
"yasamlar": {}
}

我怎么才能解决这个问题?感谢所有人

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-04 21:29:22

我解决了

代码语言:javascript
复制
public function indexAction(Request $request)
    {

        $em=$this->getDoctrine()->getManager();
        //listelenecek bütün Yasam
        $yasam_list=$em->getRepository("VanBundle:Yasam")->findAll();



        $pager=$this->get('knp_paginator');
        $paginated=$pager->paginate($yasam_list,$request->query->getInt('page',1), $request->query->getInt('limit',10));

        $factory=new KnpPaginatorFactory();
        $collection=$factory->createRepresentation($paginated,new Configuration\Route('yasamjson_index'),array()); 

        $serializer = $this->get('jms_serializer');
        $data = $serializer->serialize([
            'meta' => $collection,
            'data' => $paginated->getItems()
        ], 'json');


       return new Response($data);

    }
票数 -1
EN

Stack Overflow用户

发布于 2017-03-03 04:57:14

在开始分页之前,很少有建议:

  • 使用KnpPaginatorBundle和理论查询生成器。运行完整查询并根据结果执行分页无助于即兴发挥性能。
  • 对于REST,可以使用FosRestBundle。使用很少的配置,您就不必执行json_encode、安装Content-TypeStatus Code
  • 如果您不想使用FosRestBundle。探索并尝试使用JsonResponse作为回报,而不是Response

现在,关于将KnpPagination信息传递给API:

如果您使用的是FosRestBundle,您可以使用JMSSerializerBundle,这将帮助您将实体信息解析为JSON的API响应。您可以进一步选择要公开的属性。分页数据将被自动解析。

否则,您只需遍历KNPPaginator $result对象,就可以得到表单理论查询生成器,并将分页和数据分别发送到JsonResponse

如果你需要代码片段,请告诉我。

希望这能有所帮助!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42566334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档