2016-07-21 14 views
4

Ich lerne, API mit symfony zu bauen (mit FOSRestBundle). Ich folge einem französischen Tutorial. Offensichtlich versuche ich zuerst, den Code selbst zu schreiben, aber selbst mit einem Copy/Paste, es hält mich leer JSON-Array, wenn ich eine GET-Anfrage an die entsprechende Route (Rest-api.local/Orte).symfony/FOSRestBundle: leere JSON-Antwort (unter Verwendung des Symfony-verkörperten Serialisierers)

Der Code funktioniert in Ordnung, wenn ich den Code in PHP-Array "Format":

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

aber dann versuche ich direkt $ Plätze zu serialisiert, die Ansicht Handler von fost Ruhe (in config.yml) mit

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

und meine Funktion in meinem Controller an den folgenden Code zu ändern, erhalte ich meine JSON-Antwort, aber ohne irgendetwas zwischen "{[], [], []}" (und ich habe 3 Einträge in meiner DB) :

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

    return $places; 
} 

Es ist mein erster Beitrag auf stackoverflow, also hoffe ich meine Frage ist klar, Einen schönen Tag noch.

+0

Welchen Serializer verwenden Sie? Normalerweise haben Serializer zusätzliche Expose von Entity-Ebene, wie in [JMSSerializerBundle] (http://jmyst.com/libs/serializer/master/cookbook/exclusion_strategies) – Jeet

Antwort

1

In meinem app/config/services.yml Ich habe das hinzugefügt:

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

Ich kann immer noch nicht, warum es funktioniert, aber ganz plötzlich habe ich einen schönen json als Antwort bekam.

+1

Dank es funktionierte für mich. Auch mit dem JMS-Serializer – damioune123