Symfony2 FOSRestBundle PUT Aktion FORM liefert leere Ergebnisse zurück

8

Ich benutze Symfony 2.2 und die neueste Version von FOSRestBundle. So habe ich es geschafft, die meisten Aktionen funktionieren zu lassen, aber ich habe anscheinend ein Problem mit dem FormBuilder, dass ich den Request meines PUT-Aufrufs übergebe.

Ich habe das Anfrageobjekt überprüft und es kommt von meinem Backbone.je-Modell wie es sollte (.save ()) Aber nach der Bindung an das Formular kommt die Entity nur mit der ID zurück, die flush () einen Fehler verursacht da Pflichtfelder nicht ausgefüllt sind.

Die Aktion im Controller:

%Vor%

Das Formular, das aufgerufen wird:

%Vor%

Ich habe alles bisher versucht, aber ich bin ziemlich neu mit Symfony und ich kann nicht verstehen, warum die $ -Entität nicht die Werte enthält, die durch die Anfrage erhalten werden.

Zu Ihrer Information: Ich habe versucht, es manuell zu tun, indem ich eine Container-Klasse mit der ID der Anfrage instanziiere und die Setter dazu benutze, Werte einzugeben, und es funktioniert ganz gut, ich möchte einfach die Dinge als Symfony richtig machen schlägt vor, es sollte getan werden.

Vielen Dank im Voraus.

    
Dimitris Romeo Havlidis 07.06.2013, 04:58
quelle

4 Antworten

8

Versuchen Sie, die folgende Zeile in putAction zu ändern:

%Vor%

zu:

%Vor%     
ebonhand 23.07.2013 01:36
quelle
6

Ich denke, dass Sie das gleiche Problem haben, das ich hatte: Der Fehler liegt im Namen der Form.

In Ihrer Formulardefinition lautet der Name "greenthumbed_apibundle_containertype".     öffentliche Funktion getName ()     {         return 'greenthumbed_apibundle_containertype';     }

Um eine Anfrage an dieses Formular zu binden, sollte der json so aussehen:

%Vor%

Da Backbone .save () Methode diese Art von JSON

liefert %Vor%

Sie müssen den Namen aus dem Formular entfernen:

%Vor%

Im Allgemeinen, wenn Sie einen JSON mit einem Platzhalter wie

posten möchten %Vor%

Ihr Formularname muss genau "etwas" sein

aus meiner eigenen Frage hier

    
rollsappletree 14.12.2013 15:19
quelle
0

Verwenden Sie den ParamConverter , um Ihre Entität automatisch als Argument in Ihre Methode einzufügen .

%Vor%     
nifr 09.06.2013 05:21
quelle
0

siehe Ссылка

  

Leider ist das Leben nicht so einfach, da die meisten Browser dies tun   unterstützt nicht das Senden von PUT- und DELETE-Anfragen. Zum Glück Symfony2   bietet Ihnen eine einfache Möglichkeit, diese Einschränkung zu umgehen. Durch   Ein Parameter _method in der Abfragezeichenfolge oder Parameter von einem   HTTP-Anfrage, Symfony2 wird dies als Methode beim Abgleich verwenden   Routen. Formulare enthalten automatisch ein verstecktes Feld für diesen Parameter   wenn ihre Übermittlungsmethode nicht GET oder POST ist. Siehe das zugehörige Kapitel   Weitere Informationen finden Sie in der Formulardokumentation.

und Ссылка

  

Wenn die Methode des Formulars nicht GET oder POST ist, sondern PUT, PATCH oder DELETE,   Symfony2 fügt ein verstecktes Feld mit dem Namen "_method" ein   speichert diese Methode. Das Formular wird in einem normalen POST eingereicht   Anfrage, aber Symfony2 Router ist in der Lage, die "_method" zu erkennen   Parameter und interpretiert die Anfrage als PUT, PATCH oder DELETE   anfordern. Lesen Sie das Cookbook-Kapitel "So verwenden Sie HTTP-Methoden über GET hinaus   und POST in Routen "für weitere Informationen.

    
Rufinus 28.11.2013 19:23
quelle