2017-03-02 5 views
0

は、私が使用しようknpPaginatorBundleとrest APIの使い方は?

パブリック関数listeleAction(リクエスト$リクエスト)$ { EM =の$ this - > getDoctrine() - > getManager();

$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出力

{ 
"yasamlar": {} 
} 

どのように私はこの問題を解決することができますか?おかげで、すべての

+0

を解決しましたか? –

答えて

0

は、私はあなたが教義クエリにページネーションを使用していないのはなぜ

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); 

    } 
0

ページネーションに来る前に、いくつかの提案:

  • 使用KnpPaginatorBundle教義クエリビルダと一緒に。完全なクエリを実行して結果からページネーションを実行しても、パフォーマンスを即興にすることはできません。
  • REST APIの場合、FosRestBundleを使用できます。コンフィグレーション数が少なくてjson_encode、設定Content-TypeまたはStatus Codeを設定する必要はありません。
  • FosRestBundleを使用しない場合は、代わりにResponseの代わりにJsonResponseを使用してみてください。 APIへKnpPagination情報を渡すことについて今

、:

あなたがFosRestBundleを使用している場合は、API応答にJSONへのエンティティの情報を解析するのに役立ちますJMSSerializerBundleを使用することができます。どのプロパティを公開するかをさらに選択できます。改ページデータは自動的に解析されます。

それ以外の場合は、KNPPaginator $resultオブジェクトを反復してdoctrine query builderフォームを取得し、ページ単位とデータを個別にJsonResponseに送信するだけです。

コードスニペットが必要な場合はお知らせください。

希望すると便利です。

+0

お返事ありがとうございます。コードスニペットが必要です。お願いします! – aziz

+0

私はFosRestBundleを使わない – aziz

関連する問題