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);