programing

Axios가 있는 larabel 컨트롤러에서 캡처 오류

shortcode 2022. 7. 19. 22:08
반응형

Axios가 있는 larabel 컨트롤러에서 캡처 오류

①Axios를 사용하여 Larabel 컨트롤러의 메토스에서 에러를 캡처하려면 어떻게 해야 합니까?문제는 다음과 같습니다. 데이터가 Larabel의 UserController에 있는 myProfile 메서드의 검증자를 통과하고 올바른 경우 메서드에서 json 응답이 생성되고 Axios가 이를 받아들여 Toast Success 메시지를 표시하지만 오류가 발생하거나 빈 데이터를 validor에 전달하면 Axios는 t를 수신하지 않습니다.에러와 함께 빈 토스트를 표시하고 콘솔에 에러 422를 생성합니다.

사용자 컨트롤러의 myProfile

public function myProfile(Request $request)
{
    $valido = $this->validate($request, [
        'firstname' => 'required|min:3|max:15',
        'lastname' => 'min:2|max:15',
        'gender' => 'numeric',
        'description' => 'max:200',
    ]);

    if($valido){
        return response()->json([
            'status' => 'success',
            'msg' => 'Ok',
        ], 201);
    }
    else{
        return response()->json([
            'status' => 'error',
            'msg' => 'Error',
        ], 422);
    }

}

Profile.vue (Axios 섹션)

updateUser(){
        const value = {
            'id': this.user.id,
            'firstname': this.user.firstname,
            'lastname': this.user.lastname,
            'gender': this.user.gender,
            'description': this.user.description,
        } 

        axios.put('/dashboard/profile', value)
            .then((response) => {
                let title = response.data.status;
                let body = response.data.msg;
                this.displayNotificationSuccess(title, body);
            })
            .catch((error) => {
                let title = error.response.data.status;
                let body = error.response.data.msg;
                this.displayNotificationError(title,body);
            })
    }

Axios가 json Success fron 컨트롤러를 캡처할 때의 스크린샷

Axios가 성공 요청을 캡처할 때의 스크린샷

Axios가 컨트롤러에서 json 오류를 캡처하지 않은 경우의 스크린샷

에러

json 오류로 인해 콘솔에서 스크린샷이 생성되었지만 악시에 의해 캡처되지 않음

콘솔 오류 422

③그 문제를 어떻게 해결할 수 있을까?Larabel 5.6, Vuejs 2 및 Axios를 사용했습니다.

를 감싸면validate()메서드 호출try/catch블록, 그 다음에, 당신은 그것을 잡을 수 있습니다.ValidationException유효하지 않은 경우 느려집니다.이렇게 하면 사용자가 직접 응답을 반환할 수 있습니다.

프런트 엔드로 출력하고 싶은 경우는, 이하의 예와 검증 에러도 기재했습니다.

<?php

use Illuminate\Validation\ValidationException;

public function myProfile(Request $request)
{
    try {
        $this->validate($request, [
            'firstname'   => 'required|min:3|max:15',
            'lastname'    => 'min:2|max:15',
            'gender'      => 'numeric',
            'description' => 'max:200',
        ]);

        return response()->json([
            'status' => 'success',
            'msg'    => 'Okay',
        ], 201);
    }
    catch (ValidationException $exception) {
        return response()->json([
            'status' => 'error',
            'msg'    => 'Error',
            'errors' => $exception->errors(),
        ], 422);
    }
}

언급URL : https://stackoverflow.com/questions/49848519/capture-error-from-laravel-controller-with-axios

반응형