동일한 페이지의 여러 양식에 대한 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. 오류로 리디렉션
오류 백에 이름을 추가하려면 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에서 저를 팔로우하세요.
여러 양식에 대한 오류 메시지를 표시하는 다른 방법을 놓친 경우 피드백 및 의견을 추가하십시오.
Reference
이 문제에 관하여(동일한 페이지의 여러 양식에 대한 Laravel 유효성 검사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/balajidharma/laravel-validation-for-multiple-forms-on-the-same-page-59ff텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)