Rückgabe von json-kodierte form-Fehler in symfony
Ich möchte einen webservice, auf die ich ein Formular Absenden, und im Falle von Fehlern, wird ein jason-codierte Liste, die mir sagt, welches Feld falsch ist.
derzeit bekomme ich nur eine Liste von Fehlermeldungen, aber nicht eine html id oder einen Namen der Felder mit Fehler
hier ist meine aktuelle code
public function saveAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$form = $this->createForm(new TaskType(), new Task());
$form->handleRequest($request);
$task = $form->getData();
if ($form->isValid()) {
$em->persist($task);
$em->flush();
$array = array( 'status' => 201, 'msg' => 'Task Created');
} else {
$errors = $form->getErrors(true, true);
$errorCollection = array();
foreach($errors as $error){
$errorCollection[] = $error->getMessage();
}
$array = array( 'status' => 400, 'errorMsg' => 'Bad Request', 'errorReport' => $errorCollection); //data to return via JSON
}
$response = new Response( json_encode( $array ) );
$response->headers->set( 'Content-Type', 'application/json' );
return $response;
}
diese geben mir eine Antwort wie
{
"status":400,
"errorMsg":"Bad Request",
"errorReport":{
"Task cannot be blank",
"Task date needs to be within the month"
}
}
aber was ich wirklich will, ist so etwas wie
{
"status":400,
"errorMsg":"Bad Request",
"errorReport":{
"taskfield" : "Task cannot be blank",
"taskdatefield" : "Task date needs to be within the month"
}
}
Wie kann ich das erreichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mit diesem, es funktioniert ruhig auch:
Habe ich endlich die Lösung gefunden für dieses problem hier, es brauchte nur eine kleine Korrektur zu entsprechen neuesten symfony verpasst und es funktionierte wie ein Charme:
Das Update besteht im Ersatz der Linie 33
mit
weil mit der Einführung in symfony der Form, die\ - Taste, wird ein type mismatch auftreten, wird in serialize-Funktion, die erwartet wird immer eine Instanz der Form\Form.
Können Sie sich anmelden als ein service:
und dann verwenden Sie es wie der Autor suggerieren:
Diesem funktioniert der trick für mich
PHP assoziative arrays, mittlerweile JS hat 2 unterschiedliche Datenstrukturen : Objekte und arrays.
JSON, die Sie abrufen möchten, ist nicht legal und sollte :
So möchten Sie vielleicht, so etwas zu tun, bauen Sie Ihre Sammlung :
(vorausgesetzt, die getId () - Methode existieren auf $Fehler-Objekte)