Estoy utilizando formularios Symfony2 para validar las solicitudes POST y PUT a una API. El formulario maneja el enlace de los datos de solicitud a la entidad subyacente y luego valida la entidad. Todo funciona bastante bien, excepto por la recopilación de errores. Estoy usando FOSRestBundle y estoy lanzando un Symfony \ Component \ HttpKernel \ Exception \ HttpException con un código de estado 400 y un mensaje que contiene los mensajes de error de formulario si la validación falla. El FOSRestBundle se encarga de convertir esto en una respuesta JSON. El método de control que tengo para llevar a cabo todo esto se parece a lo siguiente (todos los campos de burbujas sus errores hasta la forma):Obtener todos los errores junto con los campos El error está conectado a
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));
}
}
El problema que tengo es que cuando recoja el nivel de formulario a través de errores $ form- > getErrors() Solo puedo acceder al mensaje de error y no al nombre del campo al que está conectado el error. Este es un problema particular cuando un parámetro POST o PUT corresponde a un id para una entidad relacionada. Si se envía un valor no válido, los mensajes de error son simplemente 'Este valor no es válido', que no es muy bueno en este contexto. Idealmente me gustaría hacer uno de los siguientes:
- Por cada error hacerse con el nombre del campo que está conectado a por lo que puedo formatear el mensaje algo así como "nombre de campo: mensaje de error"
- Si eso es No es posible personalizar el mensaje de error para un tipo de entidad no válida para que se muestre algo mejor que "Este valor no es válido".
Gracias. De alguna manera me había perdido la opción invalid_message en los documentos. Justo lo que necesitaba. – Jeremy
Advertencia: el getErrorsAsString está en desuso y se eliminará en 3.0 – wdev
Desde 3.0 es más simple: $ form-> getErrors (true, false); para obtener errores secundarios – Chopchop