validate validaciones personalizadas mensajes excepciones error crear capturar array php laravel laravel-4

php - validaciones - Laravel 4: ¿cómo devolver todos los mensajes de error de validación para todos los campos como una estructura JSON?



validate json laravel (4)

Estoy actualizando de Laravel 3 a Laravel 4. Mi aplicación tiene algunos formularios solo de AJAX que se muestran en el lado del cliente (es decir, no hay vistas del lado del servidor). Por lo tanto, en lugar de pasar los errores de validación a las vistas con el método withErrors () , he estado devolviendo los objetos de error de validación al cliente como estructuras JSON.

En Laravel 3, tuve esto:

$validation = Validator::make(Input::all(), $rules); if($validation->fails()) { return json_encode($validation->errors); } //else handle task

Pero en Laravel 4, los mensajes de error están protegidos:

$validation = Validator::make(Input::all(), $rules); if($validation->fails()) { var_dump($validation->messages()); return json_encode($validation->messages()); } //else handle task

var_dump ($ validation-> messages ()) devuelve:

object(Illuminate/Support/MessageBag)[333] protected ''messages'' => array (size=1) ''delete_confirm_password'' => array (size=1) 0 => string ''The delete confirm password field is required.'' (length=46) protected ''format'' => string '':message'' (length=8)

json_encode ($ validation-> messages) returns

{}

Pregunta: ¿cómo devuelvo todos los mensajes de error de validación para todos los campos como una estructura JSON en Laravel 4?


Descubrí que era posible usar el método toArray () :

return json_encode($validation->messages()->toArray());


Simplemente use el método toJson() .

return $validator->messages()->toJson();


Aquí hay otra forma de agregar un código HTTP a la respuesta:

return Response::json($validation->messages(), 500);


Creo que esta es la forma de Laravel de obtener los mensajes de error. Hay métodos especiales para obtenerlos. Entonces aquí cómo hago esto:

return Response::json($validator->errors()->getMessages(), 400);

Esto produce salida en el siguiente formato:

{ "field_name": [ "Error message" ] }