validar traducir que mostrar mensajes manejador idioma formulario first errors errores crear como cambiar php laravel validation exception error-handling

php - que - traducir mensajes laravel



¿Cómo puedo devolver o lanzar manualmente un error/excepción de validación en Laravel? (4)

Tenga un método que importe datos CSV a una base de datos. Hago alguna validación básica usando

class CsvImportController extends Controller { public function import(Request $request) { $this->validate($request, [ ''csv_file'' => ''required|mimes:csv,txt'', ]);

Pero después de eso, las cosas pueden ir mal por razones más complejas, más allá del agujero del conejo, que arroja excepciones de algún tipo. No puedo escribir cosas de validación adecuadas para usar con el método de validate aquí, pero realmente me gusta cómo funciona Laravel cuando falla la validación y lo fácil que es incrustar los errores en la vista de blade, etc.

¿Hay una forma (preferiblemente limpia) de decirle a Laravel manualmente que "sé que no utilicé su método de validate este momento, pero realmente me gustaría que expusiera este error aquí como si lo hiciera"? ¿Hay algo que pueda devolver, una excepción con la que pueda envolver cosas o algo?

try { // Call the rabbit hole of an import method } catch(/Exception $e) { // Can I return/throw something that to Laravel looks // like a validation error and acts accordingly here? }


A partir de laravel 5.5, la clase ValidationException tiene un método estático con withMessages que puede utilizar:

$error = /Illuminate/Validation/ValidationException::withMessages([ ''field_name_1'' => [''Validation Message #1''], ''field_name_2'' => [''Validation Message #2''], ]); throw $error;

No he probado esto, pero debería funcionar.


Simplemente vuelva del controlador:

return back()->withErrors(''your error message'');


puedes probar una bolsa de mensajes personalizada

try { // Call the rabbit hole of an import method } catch(/Exception $e) { return redirect()->to(''dashboard'')->withErrors(new /Illuminate/Support/MessageBag([''catch_exception''=>$e])); }


Laravel <= 5.6 esta solución funcionó para mí:

$validator = Validator::make([], []); // Empty data and rules fields $validator->errors()->add(''fieldName'', ''This is the error message''); throw new ValidationException($validator);