sourcecode

Larabel에서 검증 오류/예외를 수동으로 반환하거나 슬로우하려면 어떻게 해야 합니까?

copyscript 2022. 9. 19. 23:28
반응형

Larabel에서 검증 오류/예외를 수동으로 반환하거나 슬로우하려면 어떻게 해야 합니까?

CSV 데이터를 데이터베이스로 Import하는 메서드가 있습니다.다음을 사용하여 기본적인 검증을 수행합니다.

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

하지만 그 이후에는 좀 더 복잡한 이유로 일이 잘못될 수 있습니다. 토끼굴 안쪽으로 가면 어떤 종류의 예외가 생겨납니다.에 사용할 적절한 검증 자료를 쓸 수 없습니다.validate이 방법에서는 검증에 실패했을 때 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?
}

larabel 5.5 이후 클래스에는 다음과 같은 정적 메서드를 사용할 수 있습니다.

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

테스트해 본 적은 없지만, 잘 될 거예요.

갱신하다

메시지를 배열로 묶을 필요는 없습니다.다음 작업도 가능합니다.

use Illuminate\Validation\ValidationException;

throw ValidationException::withMessages(['field_name' => 'This value is incorrect']);

Larabel <= 6.2 이 솔루션은 나에게 효과가 있었습니다.

$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');

또는 다음과 같이 입력합니다.

throw ValidationException::withMessages(['your error message']);

Larabel 5.8의 경우:

.

예외를 발생시키는 가장 쉬운 방법은 다음과 같습니다.

throw new \ErrorException('Error found');

커스텀 메시지 백을 사용해 볼 수 있습니다.

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

Laravel 8 이상에서는 컨트롤러와 모델 모두에서 다음 기능이 작동합니다.

return back()->withErrors(["email" => "Are you sure the email is correct?"])->withInput();

그러면 사용자가 이전에 있었던 보기로 돌아가 지정된 필드에 대해 지정된 오류가 표시됩니다(존재하는 경우). 사용자가 입력한 정보로 모든 필드를 다시 채웁니다.이것에 의해, 잘못된 필드를 다시 입력하는 것이 아니라, 잘못된 필드를 간단하게 조정할 수 있습니다.

또 다른 기능적으로 유사한 대안은 다음과 같은 작업을 수행하는 것입니다.

throw ValidationException::withMessages(['email' => 'Are you sure the email is correct?']);

Larabel 5.5 > 에서는,

throw_if- 지정된 부울식이 다음과 같이 평가될 경우 지정된 예외를 발생시킵니다.true

$foo = true;
throw_if($foo, \Exception::class, 'The foo is true!');

또는

throw_unless- 지정된 부울식이 다음과 같이 평가될 경우 지정된 예외를 발생시킵니다.false

$foo = false;
throw_unless($foo);

여기를 참조해 주세요.

언급URL : https://stackoverflow.com/questions/47219542/how-can-i-manually-return-or-throw-a-validation-error-exception-in-laravel

반응형