Как я могу вручную вернуть или выбросить ошибку проверки/исключение в 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');
Ответ 7
Да, см. API-документы для ValidationException
throw new \Illuminate\Validation\ValidationException($message, $code);