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?
}
laravel 5.5の時点で、 ValidationException
クラスには静的メソッドwithMessages
があり、これを使用できます。
$error = \Illuminate\Validation\ValidationException::withMessages([
'field_name_1' => ['Validation Message #1'],
'field_name_2' => ['Validation Message #2'],
]);
throw $error;
これはテストしていませんが、動作するはずです。
Laravel <= 5.8このソリューションは私のために働いた:
$validator = Validator::make([], []); // Empty data and rules fields
$validator->errors()->add('fieldName', 'This is the error message');
throw new ValidationException($validator);
コントローラーから戻るだけです:
return back()->withErrors('your error message');
あなたはカスタムメッセージバッグを試すことができます
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.8の場合:
。
例外をスローする最も簡単な方法は次のとおりです。
throw new \ErrorException('Error found');
Laravel 5.4の場合:
$validator = validator([], []); // Empty data and rules fields
$validator->errors()->add('fieldName', 'This is the error message');
throw new ValidationException($validator);