tutorial sistema parte español consumir con autenticación autenticacion php validation rest laravel-4

php - sistema - API REST en Laravel al validar la solicitud



laravel passport tutorial español (4)

Actualmente estoy probando cómo construir una API RESTful con Laravel y actualmente estoy en el proceso de crear un nuevo usuario. Esto es solo una prueba y obtengo algunos resultados al intentar validar la solicitud utilizando la validación en Laravel; Aquí está el resultado:

He estado tratando de crear uno nuevo por este código:

public function store() { $validation = Validator::make(Request::all(),[ ''username'' => ''required|unique:users, username'', ''password'' => ''required'', ]); if($validation->fails()){ } else{ $createUser = User::create([ ''username'' => Request::get(''username''), ''password'' => Hash::make(Request::get(''password'')) ]); } }

pero entonces no sé cómo devolver el error en la validación. Pero sigue dándome ese HTML como se muestra en la imagen cuando intentaba hacer el si con validation->fails() . ¿Hay alguna manera de obtener la validación en formato JSON?


Laravel proporciona de manera inmediata un método de validación al que puede llamar desde su controlador.

Si verifica la clase abstracta de Laravel Controller , encontrará que usa un rasgo llamado ValidatesRequests

abstract class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; }

Así que puedes usar un método $this->validate(Request $request, array $rules); a medida que su clase de controlador extiende el controlador

La declaración completa del método es

public function validate(Request $request, array $rules, array $messages = [], array $customAttributes = []) { $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes); if ($validator->fails()) { $this->formatValidationErrors($validator); } }

Si el $ validador falla, el método emitirá un error dependiendo del tipo de solicitud, si es ajax (en este caso, debe incluir en los encabezados de solicitud ( Accept application/json ) devolverá una respuesta JSON que contiene los errores de validación.


Para laravel 5.5 y versiones posteriores, consulte los documentos: Solicitudes y validación de AJAX.

TL; DR: En la validación fallida, se devuelve una respuesta json con un 422 junto con los mensajes de error de validación. Me tomó un poco de tiempo encontrar esos errores de validación en el objeto de respuesta, así que para ver los mensajes de error si está utilizando axios, intente esto en la consola de su navegador:

axios.post(''/api/your-route-here'') .then(response => { console.log(response.data); }).catch(error => { console.log(error.response.data.errors) });


Probablemente debería devolver los errores (que es una instancia de Illuminate/Support/MessageBag ) y codificarlos. Una instancia de MessageBag permite convertirla directamente a su representación JSON.

$errors = $validation->errors(); return $errors->toJson();

Ahora no toco mi propia bocina pero recientemente he desarrollado un paquete de API RESTful para Laravel que hace todo esto por usted y todo lo que necesita hacer es lanzar una simple excepción. Ver mi paquete dingo/api y el Wiki sobre los errores de retorno . Básicamente, en lugar de devolver los errores, lanzarías una excepción.

throw new Dingo/Api/Exception/StoreResourceFailedException(''Could not create a new user.'', $validation->errors());

Estaría representado por el siguiente JSON.

{ "message": "Could not create a new user.", "errors": { "username": ["The username is already in use."] } }


Estos códigos te ayudarán, trabajando para mí.

$response = array(''response'' => '''', ''success''=>false); $validator = Validator::make($request->all(), $rules); if ($validator->fails()) { $response[''response''] = $validator->messages(); }else{ //process the request } return $response;