Have a method that's importing CSV-data into a Database. I do some basic validation using
class CsvImportController extends Controller { public function import(Request $request) { $this->validate($request, [ 'csv_file' => 'required|mimes:csv,txt', ]);
But after that things can go wrong for more complex reasons, further down the rabbit hole, that throws exceptions of some sort. I can't write proper validation stuff to use with the validate
method here, but, I really like how Laravel works when the validation fails and how easy it is to embed the error(s) into the blade view etc, so...
Is there a (preferably clean) way to manually tell Laravel that "I know I didn't use your validate
method right now, but I'd really like you to expose this error here as if I did"? Is there something I can return, an exception I can wrap things with, or something?
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? }
As of laravel 5.5, the ValidationException
class has a static method withMessages
that you can use:
$error = \Illuminate\Validation\ValidationException::withMessages([ 'field_name_1' => ['Validation Message #1'], 'field_name_2' => ['Validation Message #2'], ]); throw $error;
I haven't tested this, but it should work.
Update
The message does not have to be wrapped in an array. You can also do:
use Illuminate\Validation\ValidationException; throw ValidationException::withMessages(['field_name' => 'This value is incorrect']);
Laravel <= 6.2 this solution worked for me:
$validator = Validator::make([], []); // Empty data and rules fields $validator->errors()->add('fieldName', 'This is the error message'); throw new ValidationException($validator);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With