2016-06-16 9 views
0

Ich verwende FOSRestBundle in Symfony2, um einen REST-Service bereitzustellen.Symfony2 FOSRestBundle Return-Entity-Felder im Formular

Derzeit gibt mein Controller eine Entität zurück, wenn eine Ressource angefordert wird (z. B. /users/40). Das Frontend enthält ein Formular, das es erlaubt, diese Ressource zu manipulieren und mit PUT zurückzusenden. Der Controller verwendet ein Formular, um die Daten zu verarbeiten.

Mein Problem ist, dass das Formular weniger Felder als die gesamte Entität hat (id und password_hash sind gute Beispiele). Ich kam zu dem Schluss, dass das Senden der gesamten Entität an den Kunden eine schlechte Idee ist. Stattdessen möchte ich, dass FOSRestBundle nur die Entitätsfelder sendet, die im Formular verfügbar sind.

So einfach habe ich versucht:

return $this->createForm(UserType::class, $entity); 

Die JSON-Struktur von dem Server von FOSRestBundle zurück sieht sehr gut aus. Aber leider enthält es keine Werte.

Natürlich ist es nicht - die Form ist nicht gebunden. Und an diesem Punkt macht es keinen Sinn, Daten zu binden. Daher muss ich eine andere Lösung finden.

Dieser Anwendungsfall wird in meinen Anwendungen sehr häufig vorkommen. Ich frage mich also, ob es keinen einfachen/standardmäßigen Weg dafür gibt.

(PS I verwenden Angular JS im Frontend. Lege ich einfach die Entität Ressource JSON den Umfang und die symfony Formularvorlagen Formularfelder zu erzeugen, die automatisch auf die richtige Objekt des Umfangs gebunden sind)

Antwort

1

The Um zu definieren, was von FOS zurückgegeben werden soll, können Sie Serializer-Gruppen und entweder die Symfony Serializer-Komponente oder den JMS-Serializer verwenden.

In beiden Fällen können Sie Gruppen auf Ihrem Entitätseigenschaften definieren:

// in the entity 
use Symfony\Component\Serializer\Annotation\Groups; 

class Story 
{ 
    /** 
    * @Groups({"story"}) 
    * 
    * @var int 
    */ 
    private $id; 

Und dann:

// in the controller 
* @Rest\View(serializerGroups={"story"}) 
* @Rest\Route("stories") 
* 
* @return Story[] 
*/ 
public function getStoriesAction() 

Welche Sie ein oder mehrere Objekte mit den Eigenschaften passend zu den Controller Serializer Gruppen ausgesetzt zurück.