2016-07-21 6 views
4

私はsymfony(FOSRestBundleを使用)でAPIをビルドすることを学んでいます。私はフランスのチュートリアルに従っています。明らかに、私はまず自分でコードを書こうとしますが、コピー/貼り付けをしても、適切なルート(rest-api.local/places)にGETリクエストを行うと空のJSON配列が保持されます。symfony/FOSRestBundle:空のJSONレスポンス(symfony実装のシリアライザを使用)

I「形式」PHPの配列のコード場合、コードはOK作品:

public function getPlacesAction(Request $request) 
{ 
    $places = $this->get('doctrine.orm.entity_manager') 
      ->getRepository('AppBundle:Place') 
      ->findAll(); 
    /* @var $places Place[] */ 

    $formatted = []; 
    foreach ($places as $place) { 
     $formatted[] = [ 
      'id' => $place->getId(), 
      'name' => $place->getName(), 
      'address' => $place->getAddress(), 
     ]; 
    } 

    return new JsonResponse($formatted); 
} 

が、その後、私は(config.ymlに)fost残りのビューハンドラを使用して、直接$場所をシリアル化しようとする

fos_rest: 
routing_loader: 
    include_format: false 
view: 
    view_response_listener: true 
format_listener: 
    rules: 
     - { path: '^/', priorities: ['json'], fallback_format: 'json' } 

、次のコードを私のコントローラで私の機能を変更する、私は(私は私のDBに3つのエントリを持っている)私のJSON応答を得るが、「{[]、[]、[]}」の間に何もせずに:

public function getPlacesAction(Request $request) 
{ 
    $places = $this->get('doctrine.orm.entity_manager') 
      ->getRepository('AppBundle:Place') 
      ->findAll(); 
    /* @var $places Place[] */ 

    return $places; 
} 

これは私の最初の投稿stackoverflowだから、私は私の質問が明確であることを願って、良い一日を。私app/config/services.yml

+0

使用しているシリアライザはどれですか?通常、シリアライザは[JMSSerializerBundle](http://jmsyst.com/libs/serializer/master/cookbook/exclusion_strategies) – Jeet

答えて

1

は、私はこれを追加しました:それは動作しますが、突然、私は応答での素敵なJSONを持っている理由

services: 
    object_normalizer: 
     class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer 
     # Important! Tag this service or it wouldn't work 
     tags: 
      - { name: serializer.normalizer } 

私はまだ取得することはできません。

+1

のように、エンティティレベルから追加の公開をしてくれました。同様にjmsシリアライザを使用する – damioune123

関連する問題