동일한 페이지의 여러 양식에 대한 Laravel 유효성 검사

동일한 페이지의 여러 양식에 대한 유효성 검사 오류 표시




Unsplash의 Max Chen 사진

Laravel Basic Admin panel에서 프로필 업데이트를 위해 동일한 페이지에 두 가지 양식을 구현해야 합니다.

기본 정보를 위한 양식과 비밀번호 업데이트를 위한 양식. 유효성 검사를 위해 $request->validate() 컨트롤러의 메서드를 사용했습니다.

$request->validate([
    'name' => ['required', 'string', 'max:255'],
    'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email,'.\Auth::user()->id],
]);


보기에서 아래 코드를 사용하여 오류를 표시했습니다.

@if ($errors->any())
    <ul class="mt-3 list-none list-inside text-sm text-red-400">
        @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
@endif


그러나 오류를 표시하는 데 동일한 $errors 변수가 사용되었기 때문에 두 형식 모두에 오류가 표시되었습니다.



$errors 변수는 Illuminate\Support\MessageBag의 인스턴스가 됩니다. 이 문제를 해결하기 위해 Laravel에는 inbuild 솔루션이 있습니다. MessageBag에 이름을 추가할 수 있습니다. 라라벨은 Named Error Bags

명명된 오류 가방



여러 가지 방법으로 명명된 오류를 추가할 수 있습니다.
  • 1. 오류가 있는 리디렉션
  • 2. validateWithBag 메서드

  • 1. 오류로 리디렉션



    오류 백에 이름을 추가하려면 withErrors의 두 번째 인수로 이름을 전달하면 됩니다.

    계정의 경우 명명된 오류로 '계정'을 추가하고 비밀번호 업데이트 양식에 '비밀번호'를 추가했습니다.

    $validator = Validator::make($request->all(), [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email,'.\Auth::user()->id],
    ]);
    
    if ($validator->fails()) {
        return redirect('admin.account.info')
                    ->withErrors($validator, 'account')
                    ->withInput();
    }
    


    보기 오류 표시를 위해 아래 코드를 업데이트하십시오.

    명명된 오류 백을 보기에 표시하는 방법




    @if ($errors->account->any())
        <ul class="mt-3 list-none list-inside text-sm text-red-400">
            @foreach ($errors->account->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    @endif
    


    2. validationWithBag 방법



    유효성 검사에 실패할 경우 validateWithBag 메서드를 사용하여 오류 메시지를 named error bag에 저장할 수 있습니다.

    \Validator::make($request->all(), [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email,'.\Auth::user()->id],
    ])->validateWithBag('account');
    


    또한 $request->validateWithBag를 사용할 수 있습니다.

    $request->validateWithBag('account', [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email,'.\Auth::user()->id],
    ]);
    


    암호를 확인하기 위해 아래 코드를 추가했습니다.

    $validator = \Validator::make($request->all(), [
        'old_password' => ['required'],
        'new_password' => ['required', Rules\Password::defaults()],
        'confirm_password' => ['required', 'same:new_password', Rules\Password::defaults()],
    ]);
    
    $validator->after(function ($validator) use ($request) {
        if ($validator->failed()) return;
        if (! Hash::check($request->input('old_password'), \Auth::user()->password)) {
            $validator->errors()->add(
                'old_password', 'Old password is incorrect.'
            );
        }
    });
    
    $validator->validateWithBag('password');
    



    동일한 페이지의 여러 양식에 대한 Laravel 유효성 검사

    읽어 주셔서 감사합니다!

    balajidharma.medium.com에서 저를 팔로우하세요.

    여러 양식에 대한 오류 메시지를 표시하는 다른 방법을 놓친 경우 피드백 및 의견을 추가하십시오.

    좋은 웹페이지 즐겨찾기