Как я могу вручную вернуть или выбросить ошибку проверки/исключение в Laravel?

Имейте метод импорта CSV-данных в базу данных. Я делаю некоторые основные проверки с помощью

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

Но после этого все может пойти не так по более сложным причинам, далее вниз по кроличьей дыре, что порождает исключения. Я не могу написать правильный материал для проверки, который будет использоваться здесь с помощью метода validate, но мне очень нравится, как работает Laravel, когда проверка завершается неудачей, и насколько легко внедрить ошибки (ошибки) в вид блейда и т.д., Так что...

Есть ли (желательно чистый) способ вручную сообщить Laravel, что "я знаю, что я не использовал ваш метод validate прямо сейчас, но мне бы очень хотелось, чтобы вы обнаружили эту ошибку здесь, как если бы я это сделал"? Есть ли что-то, что я могу вернуть, исключение, которое я могу обернуть или что-то еще?

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?
}

Ответ 1

Начиная с laravel 5.5, класс ValidationException имеет статический метод withMessages который вы можете использовать:

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

Я не проверял это, но это должно работать.

Ответ 2

Laravel & lt; = 6.0 это решение помогло мне:

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

Ответ 3

Просто вернитесь с контроллера:

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

Ответ 4

вы можете попробовать собственный пакет сообщений

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

Ответ 5

Для Laravel 5.4:

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

Ответ 6

Для Laravel 5.8:

.

Самый простой способ вызвать исключение - это так:

throw new \ErrorException('Error found');