Ich verwende Symfony2-Formulare, um POST- und PUT-Anfragen an eine API zu validieren. Das Formular behandelt das Binden der Anforderungsdaten an die zugrunde liegende Entität und dann das Validieren der Entität. Alles funktioniert ziemlich gut, außer dass man Fehler sammelt. Ich benutze das FOSRestBundle und werfe eine Symfony \ Component \ HttpKernel \ Exception \ HttpException mit einem 400 Statuscode und einer Nachricht, die die Formularfehlermeldungen enthält, wenn die Validierung fehlschlägt. Der FOSRestBundle übernimmt die Konvertierung in eine JSON-Antwort. Die Controller-Methode Ich habe all dies auszuführen sieht wie folgt aus (alle Felder Blase ihre Fehler in die Form nach oben):Erhalte alle Fehler zusammen mit Feldern, an die der Fehler angeschlossen ist
protected function validateEntity(AbstractType $type, $entity, Request $request)
{
$form = $this->createForm($type, $entity);
$form->bind($request);
if (! $form->isValid()) {
$message = ['Invalid parameters passed.'];
foreach ($form->getErrors() as $error) {
$message[] = $error->getMessage();
}
throw new HttpException(Codes::HTTP_BAD_REQUEST, implode("\n", $message));
}
}
Das Problem ist, dass ich, wenn ich sammle die Form Level-Fehler durch $ form- > getErrors() Ich kann nur auf die Fehlermeldung und nicht auf den Namen des Feldes zugreifen, mit dem der Fehler verbunden ist. Dies ist ein besonderes Problem, wenn ein POST- oder PUT-Parameter einer ID für eine verwandte Entität entspricht. Wenn ein ungültiger Wert übergeben wird, lautet die Fehlermeldung dafür einfach "Dieser Wert ist nicht gültig", was in diesem Zusammenhang nicht sehr gut ist. Im Idealfall würde Ich mag eine der folgenden tun: Für jeden Fehler
- hält die Feldnamen bekommt es verbunden ist, so dass ich die Meldung etwas formatiert werden kann, wie „Feldname: Fehlermeldung“
- Wenn die nicht möglich ist es möglich, die Fehlermeldung für einen ungültigen Entitätstyp anzupassen, so dass etwas besser als 'Dieser Wert ist nicht gültig' angezeigt wird?
Danke. Irgendwie hatte ich die Option invalid_message in den Dokumenten verpasst. Genau das, was ich brauchte. – Jeremy
Warnung: Der getErrorsAsString ist veraltet und wird in 3.0 entfernt. – wdev
Seit 3.0 ist es einfacher: $ form-> getErrors (true, false); um Kindfehler zu bekommen – Chopchop