2017-11-20 8 views
2

私はJSON
としてリポジトリオブジェクトを送信しようとしている上、JSONとしてリポジトリからのオブジェクトを返す方法 私のコントローラのコード:Symfony3

if($request->isXmlHttpRequest()){ 
     $data = $request->request->get('id'); 
     $bedroom = $em->getRepository('EpitaHousingBundle:Bedroom')->findOneBy(array('id'=>$data)); 

     $this->container->get('logger')->addInfo('somesh'); 

     return $json = new Response(json_encode(array('bedroom' => $bedroom))); 
     } 

私のjavascriptのコード:ここ

$(document).ready(function(){    
    var id_select = $('#bedroom_view_bedroom').val();   
    $.ajax({ 
      type: 'POST', 
      url: '{{ (path('listingview', {'id': id})) }}', 
      contentType: 'application/x-www-form-urlencoded', 
      data: {id:id_select}, 
     success: function(result,status,xhr){ 
      var inst_arr = JSON.parse(result); 
      console.log(inst_arr); 
      }, 
     error: function(xhr, status, error) {  
       console.log(status); 
      } 
     }); 
    }); 

私は応答として空オブジェクトを取得します。 symfony3を使用してjsonとしてリポジトリオブジェクトを送信するにはどうすればいいですか?私を助けてください。事前のおかげで...

編集:私は私がしようとした場合、それが

jquery.min.js:4 POST http://localhost/epitahousing/web/app_dev.php/provider/listing/view/8 500 (Internal Server Error)error 

を示す

if ($request->isXmlHttpRequest()) { 
     $data = $request->request->get('id'); 
     $bedroom = $em->getRepository('EpitaHousingBundle:Bedroom')->findOneBy(array('id' => $data)); 
     if (null === $bedroom) { 
      $bedroomJson = ''; 
     } 
     $this->container->get('logger')->addInfo('somesh'); 
     $serializer = $this->container->get('serializer');   
     $bedroomJson = $serializer->serialize($bedroom, 'json'); 

     return new Response($bedroomJson, Response::HTTP_OK, ['content-type' => 'application/json']); 
    } 

コンソールのようなコードの下にしようとしたことが間違っている場合知らない

xmlHttpRequestの前にリポジトリオブジェクトを見つける

$bedroom = $em->getRepository('EpitaHousingBundle:Bedroom')->findOneBy(array('id' => '12')); 
    if ($request->isXmlHttpRequest()) {   
     //code 
    } 

がここに適切なオブジェクトを示したが、間違った

EDIT2行くいただきました!私は本当にJSONを知らない:私は一人一人のために...今では正常に動作しています。このよう 感謝を行って

$bedroom = $this->em->getRepository('EpitaHousingBundle:Bedroom')->findOneBy(array('id'=>$data)); 

     $output['rentamount'] = $bedroom->getRentamount(); 
     $output['rentcurrency'] = $bedroom->getRentcurrency()->getValue(); 
     $output['rentduration'] = $bedroom->getRentduration()->getValue(); 
     $output['bondamount'] = $bedroom->getBondamount(); 
     $output['bondcurrency'] = $bedroom->getBondcurrency()->getValue(); 
     $output['leaseminduration'] = $bedroom->getLeaseminduration()->getValue(); 
     $output['leasemaxduration'] = $bedroom->getLeasemaxduration()->getValue(); 
return $json = new Response(json_encode($output)); 

...など貴重な応答

+0

私の答えはあなたを助けましたか?はいの場合はそれを受け入れてください:) – Mcsky

答えて

1

JsonResponseクラスを使用する必要があります。あなたはJSONにオブジェクトを変換するために使用すべきSerializer Component

return new JsonResponse(array('bedroom' => $bedroom));

+0

私はJsonResponseクラスを試しました。私は500(内部サーバーエラー)を取得しています – somesh

+0

どのように使用しましたか?コメントに私を見ることができますか? –

+0

return $ json = new JsonResponse(json_encode(array( 'bedroom' => $ bedroom)));この – somesh

2

symfonyの船(あなたのSfのバージョンを選択します)。

APP /設定/ config.yml

有効シリアライザ成分

serializer: 
     enabled: true 

コントローラー

if($request->isXmlHttpRequest()){ 
    $data = $request->request->get('id'); 
    $bedroom = $em->getRepository('EpitaHousingBundle:Bedroom')->findOneBy(array('id'=>$data)); 
    if(null === $bedroom) { 
     // return some error response 
    } 
    $this->container->get('logger')->addInfo('somesh'); 
    $serializer = $this->container->get('serializer'); 
    $bedroomJson = $serializer->serialize($bedroom, 'json'); 

    return new Response($bedroomJson, Response::HTTP_OK, ['content-type' => 'application/json']); 
} 

$bedroomJsonはエンティティ・オブジェクトを表すJSON文字列でなければなりません。何かが間違っている場合は教えてください:)私はそれが助けて欲しい!

+0

レスポンスありがとう私は結果オブジェクトが表示されていませんリソースを読み込めませんでした:サーバーが500のステータス(内部サーバーエラー)で応答しました – somesh

+0

私は 'シリアライザ'サービスを再試行してください。エラーが発生した場合は、コメントにリンクしてください:) – Mcsky

+0

@someshを取得する際に、どのようなエラーが発生していますか? McSkyの答え。 – Andy

0

私はsymfony3を使用しています。私の場合、これは私のために働いています。

$obj = "your object"; 
$data = $this->get('serializer')->serialize($obj, 'json'); 
return new Response($data); 
+0

ありがとうございます@habibun i done json配列でオブジェクト属性を送信する方法 – somesh