Sto utilizzando i moduli Symfony2 per convalidare le richieste POST e PUT a un'API. Il modulo gestisce il binding dei dati della richiesta all'entità sottostante e quindi la convalida dell'entità. Tutto funziona abbastanza bene tranne che per la raccolta di errori. Sto usando FOSRestBundle e sto lanciando un Symfony \ Component \ HttpKernel \ Exception \ HttpException con un codice di stato 400 e un messaggio contenente i messaggi di errore del modulo se la validazione fallisce. FOSRestBundle gestisce la conversione di questa in una risposta JSON. Il metodo di controllo che devo svolgere tutto questo è simile al seguente (tutti i campi bolla loro errori fino alla forma):Ottieni tutti gli errori insieme ai campi a cui è collegato l'errore.
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));
}
}
Il problema che ho è che quando raccolgo gli errori a livello di modulo attraverso $ form- > getErrors() Posso solo accedere al messaggio di errore e non al nome del campo a cui è collegato l'errore. Questo è un problema particolare quando un parametro POST o PUT corrisponde a un ID per un'entità correlata. Se viene inviato un valore non valido, i messaggi di errore per questo sono semplicemente 'Questo valore non è valido', il che non è molto buono in questo contesto. Idealmente mi piacerebbe fare una delle seguenti operazioni:
- Per ogni errore entrare in possesso del nome del campo a cui è collegato in modo che possa formattare il messaggio qualcosa come "nomecampo: messaggio di errore"
- Se questo è non è possibile personalizzare il messaggio di errore per un tipo di entità non valido in modo che venga visualizzato qualcosa di meglio di "Questo valore non è valido"?
Grazie. In qualche modo mi sono perso l'opzione invalid_message nei documenti. Proprio quello di cui avevo bisogno. – Jeremy
Avviso: getErrorsAsString è obsoleto e verrà rimosso in 3.0 – wdev
A partire dalla 3.0 è più semplice: $ form-> getErrors (true, false); per ottenere errori figlio – Chopchop