2016-03-30 13 views
1

Ich versuche, eine API-Anwendung mit den FosUserBundle-Funktionen zu erstellen.Wie kann ich das Datenempfangsformat in einem FosUserBundle-Formular ändern?

ich nicht das Datenübertragungsformat ändern kann, in der Tat, wenn ich die Anfrage mit den Parametern auf diese Weise gebaut senden, funktioniert:

{"fos_user_registration_form": 
    { 
     "username":"test", 
     "plainPassword": 
          { 
           "first":"123456", 
           "second":"123456" 
          }, 
     "email":"[email protected]", 
     "name":"test" 
    } 
} 

Aber wenn ich die Zeichenfolge fos_user Anmeldeformular ändern, zum Beispiel mit der Zeichenfolge Benutzer, um es sauberer als eine öffentliche API zu machen, funktioniert nicht mehr.

Kann dieses Format geändert werden?

Vielen Dank für die Antworten.

Antwort

0

Ich denke, Sie eine andere Aktion schaffen sollten (Rest controller/action), die die erforderlichen Informationen behandelt, die sein würde:

{ 
     "username":"test", 
     "plainPassword": "123456", 
     "email":"[email protected]", 
     "name":"test" 
} 

Und da in Ihnen die Validierung von Hand, mit dem Formular oder nicht verarbeiten kann und die Speichern Sie es mit dem Manager.

Ich habe nicht den detaillierten Prozess, wie es zu tun, aber Sie können grundsätzlich die Dienste verwenden, die Register auf dem DI-Container fos_user, wie:

fos_user.registration.form.factory FOS \ UserBundle \ Formular \ Fabrik \ FormFactory
fos_user.registration.form.type FOS \ UserBundle \ Formular \ Art \ RegistrationFormType fos_user.user_manager FOS \ UserBundle \ Lehre \ Usermanager

Damit können Sie im Prinzip alle erforderlichen Validierungen durchführen, aber den Anfragetext vom endgültigen API-Benutzer anpassen, außerdem haben Sie mehr Kontrolle und sind bei Updates sicher.

+0

Vielen Dank für die Antwort. Aber auch wenn ich einen eigenen Controller/eine eigene Aktion habe, kann ich die Request-Parameter nicht wie gewünscht an die ** fos_user.registration.form ** senden, da sie mir einen Fehler zurückgibt. Die Daten werden nicht an das Formular gebunden, wenn ich die Überschrift ** "fos_user_registration_form" weglasse ** – Debiff

0

Ich habe endlich die Lösung für mein Problem gefunden!

Trivial gibt es eine Option in der Konfiguration von FosUserBundle Namen unter Form Option genannt.

ich unter meiner Konfiguration für ein besseres Verständnis Post (in diesem Fall möchte ich das Formular Registrierungsnamen ändern):

fos_user: 
db_driver: orm 
firewall_name: login 
user_class: SB\UserBundle\Entity\User 
registration: 
    form: 
     name: user 

Mit freundlichen Grüßen.