Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I manually return or throw a validation error/exception in Laravel?

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? } 
like image 813
Svish Avatar asked Nov 10 '17 09:11

Svish


2 Answers

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']); 
like image 109
Erin Avatar answered Sep 30 '22 05:09

Erin


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); 
like image 42
Mārtiņš Briedis Avatar answered Sep 30 '22 06:09

Mārtiņš Briedis