Laravel의 데이터 검증: 편리하고 강력함

게시 됨: 2023-05-03

이제 애플리케이션의 데이터가 유효하고 정확하며 모든 시스템 요구 사항을 충족하는 것이 그 어느 때보다 중요합니다. 데이터 일관성을 유지하고 보안 취약성을 방지해야 할 필요성을 해결합니다.

Laravel은 데이터 검증을 쉽고 직관적으로 만듭니다. 모델 보기 컨트롤러(MVC) 아키텍처를 따르며 PHP 및 객체 지향 프로그래밍(OOP) 개념에 대한 일반적인 지식만 필요합니다. 또한 Laravel은 들어오는 데이터를 검증하는 여러 가지 방법을 제공합니다.

이러한 접근 방식 중 일부와 데이터세트에 유효성 검사 규칙을 적용하는 방법을 살펴보세요.

Laravel에서 데이터 유효성 검사가 쉬워졌습니다.

Laravel은 애플리케이션의 사용자가 양식을 통해 데이터를 제출할 때 사용할 수 있는 몇 가지 검증 규칙을 제공합니다. 입력 필드를 필수로 표시하고, 최소 또는 최대 길이를 설정하고, 고유한(중복되지 않은) 항목과 유효한 이메일 주소를 요구할 수 있습니다. Laravel 유효성 검사기는 입력이 이러한 규칙 또는 지정한 다른 규칙을 만족하는지 확인합니다.

이러한 Laravel 유효성 검사 규칙에는 다음이 포함됩니다.

  • required — 필드 데이터는 null이거나 비어 있지 않아야 합니다.
  • array — 필드 데이터는 PHP 배열이어야 합니다.
  • bail — 유효성 검사 규칙은 첫 번째 유효성 검사 실패가 발생한 후 실행을 중지합니다.
  • email — 필드 데이터는 유효한 이메일 주소여야 합니다.
  • unique - 필드 데이터는 데이터베이스 테이블에서 중복되지 않아야 합니다.

모든 유효성 검사 방법에는 장단점이 있지만 그 다양성을 통해 요구 사항에 가장 적합한 방법을 선택할 수 있습니다. 선택한 방법에 따라 Laravel 유효성 검사는 수동 또는 자동 오류 메시지와 함께 여러 가지 방법으로 발생할 수 있습니다.

가장 일반적인 방법은 들어오는 HTTP 요청에 사용되는 code>validate입니다. 이 메서드는 요청 데이터에 연결되어 유효성 검사 규칙을 실행합니다. 아래 예와 같이 각 필드에 대한 규칙을 쉼표로 구분할 수 있습니다.

 use Illuminate\Http\Request; public function store (Request $request){ $validated = $request->validate([ 'email' => ['required, unique:users, email, bail'], 'name' => ['required'], ]); }

여기서 email 필수 입력이므로 null일 수 없습니다. 또한 동일한 이메일 주소가 두 번 등록되지 않도록 users 데이터베이스 테이블에서 고유해야 합니다. 마지막 규칙은 이메일 주소도 유효해야 함을 나타냅니다. 그렇지 않으면 유효성 검사 프로세스가 중단됩니다. 이름 필드는 필수 항목이지만 다른 규칙은 없습니다.

Laravel 유효성 검사 규칙이 실패하면 응답이 자동으로 생성됩니다.

하나의 데이터 오류가 모든 노력을 망치게 하지 마십시오! 데이터를 검증하고 프로젝트를 안전하고 건전하게 유지하세요 ️ Click to Tweet

유효성 검사 기본 사항

유효성 검사 방법을 더 잘 이해하려면 다음 예를 고려하십시오. 끝점에 대한 경로를 정의하고 컨트롤러를 생성하여 요청 데이터의 유효성을 검사하고 처리합니다.

먼저 사용자가 이메일과 암호를 저장할 수 있는 간단한 끝점을 만듭니다.

경로 정의

Laravel 경로는 웹 애플리케이션의 경우 route/web.php 파일 또는 API의 경우 route/api.php 에서 정의됩니다. 이 예에서는 api.php를 사용합니다.

 use App\Http\Controllers\UserController; Route::post('/store', [UserController::class]);

컨트롤러 만들기

이 Artisan 명령을 실행하여 컨트롤러를 생성합니다.

 php artisan make:controller UserController

이 명령은 app/Http/Controllers 디렉토리에 UserController.php 파일을 생성합니다.

이제 저장하기 전에 저장 끝점에 입력되는 데이터의 유효성을 검사하는 store 메서드를 정의합니다.

이 예에서는 이러한 규칙을 사용하여 다음 필드의 유효성을 검사합니다.

  • 이메일 — 고유하고 유효한 이메일이어야 하며 필수 항목이어야 합니다.
  • 암호 — 최소 길이, 암호 확인이 있어야 하며 필수 항목이어야 합니다.
  • age — 숫자여야 하며 필수 항목이어야 합니다.
 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { /** * Store new user details. * */ public function store(Request $request){ $validated = $request->validate([ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); // After user data is validated, logic to store the data } }

confirmed 규칙을 사용하면 사용자가 등록 중에 암호를 다시 입력하는 것과 같이 데이터가 정확한지 확인하기 위해 특정 필드를 두 번 요구할 수 있습니다. 이 규칙에는 데이터가 암호 필드와 일치해야 하는 password_confirmation 필드가 필요합니다.

오류 메시지 표시

유효성 검사 기준이 충족되면 코드가 정상적으로 계속 실행됩니다. 유효성 검사가 실패하면 IlluminateValidationValidationException 예외가 발생하고 적절한 오류 응답이 반환됩니다.

이 예제는 JSON 형식으로 422 Unprocessable Entity HTTP 응답을 반환하는 API를 기반으로 합니다. 웹 애플리케이션의 경우 오류 메시지를 표시하기 위해 이전 URL로 리디렉션되고 요청 데이터가 세션에 깜박입니다.

보기에서 $errors 변수를 사용하여 반환된 오류를 표시할 수 있습니다.

 @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif

첫 번째 오류만 보도록 선택하거나 루프를 통해 모두 보도록 선택할 수도 있습니다.

 // Fetch all errors $errors->all() // Fetch only the first error $errors->first()

양식 다시 채우기

양식을 다시 채우면 사용자가 정보를 다시 입력하지 않아도 되므로 오류 수정에 집중할 수 있습니다. 실패한 이메일 주소의 예에서 name 필드의 이전 값을 호출하여 양식의 나머지 부분을 다시 채울 수 있습니다.

 $name = $request-> old('name') //Blade helper <input type="text" name="name" value="{{ old('name') }}">

이 규칙은 이전 입력이 없으면 null 반환합니다.

고급 검증

Laravel은 양식 요청이라는 유효성 검사를 작성하는 또 다른 방법을 제공합니다. 양식 요청은 유효성 검사를 구성하고 컨트롤러를 정리하는 사용자 지정 요청 클래스입니다.

대규모 입력 볼륨에 적합한 자체 유효성 검사 및 권한 부여 논리가 있으며 유효성 검사 규칙을 정의하고 오류 메시지를 사용자 지정하는 데 사용할 수 있습니다.

양식 요청을 생성하려면 다음 Artisan 명령을 실행하십시오.

 php artisan make:request StoreUserRequest

이 명령은 app/Http/Requests 디렉터리에 StoreUserRequest.php 파일을 만들고 두 가지 기본 메서드를 포함합니다.

  • rules 요청 데이터에 대한 유효성 검사 규칙을 반환합니다.
  • authorize 사용자가 요청된 작업을 수행할 수 있는 권한이 있는지 여부를 나타내는 부울을 반환합니다.

이전 예제를 변환하여 양식 요청을 사용하십시오.

 <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreUserRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { // Add logic to check if the user is authorized to submit this data. return true; } /** * Get the validation rules that apply to the request. * * @return array<string, mixed> */ public function rules() { return [ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]; } }

이러한 규칙의 오류 메시지를 사용자 지정하려면 FormRequest 클래스의 메시지 메서드를 재정의할 수 있습니다.

 /** * Get the error messages for the defined validation rules. * * @return array */ public function messages() { return [ 'email.required' => 'An email address is required', 'email.email' => 'The email address must be valid', 'password.confirmed'=>'Re-type your password as password_confirmation, passwords does not match' ]; }

참고: 데이터 이름과 확인 규칙은 메시지 데이터 앞에 마침표(.)로 구분됩니다.

맞춤 유효성 검사

사용자 정의 유효성 검사를 생성하려면 validate 대신 Validator 파사드를 사용할 수 있습니다. 유효성 검사기 인스턴스에는 유효성을 검사할 데이터와 유효성 검사 규칙의 배열이라는 두 가지 인수가 포함되어 있습니다. 이 두 인수는 유효성 검사기 파사드의 ::make 메소드에 전달되어 새로운 유효성 검사기 인스턴스를 생성합니다.

 use Illuminate\Http\Request; public function store (Request $request){ $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); if ($validator->fails()) { // Return errors or redirect back with errors return $validator->errors(); } // Retrieve the validated input... $validated = $validator->validated(); // Continue logic to store the data }

자동 다이렉트를 추가하려면 기존 유효성 검사기 인스턴스에서 validate 메서드를 실행할 수 있습니다. 유효성 검사가 실패하면 XHR 요청은 상태 코드로 422 Unprocessable Entity 포함된 JSON 응답을 생성하거나 사용자가 즉시 리디렉션됩니다.

 $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'password' => 'required|min:7|confirmed' ])->validate();

또한 messages 라는 세 번째 인수를 Validate::make method 에 전달하여 오류 메시지를 사용자 정의할 수 있습니다.

 $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ], $messages = [ 'required' => 'The :attribute field is required.', ]);

참고: :attribute 유효성 검사 중인 필드의 이름으로 대체됩니다.

많은 양의 데이터로 작업하면 빠르게 통제 불능 상태가 될 수 있습니다. Laravel 유효성 검사로 프로젝트(및 건강!)를 보호하세요. 클릭하여 트윗하는 방법은 다음과 같습니다.

요약

데이터 유효성 검사를 수행하는 것은 데이터 세트를 깨끗하고 정확하며 완전하게 유지하는 데 중요합니다. 데이터 유효성 검사를 통해 잠재적으로 손상되거나 프로젝트에 영향을 줄 수 있는 데이터 오류를 제거할 수 있습니다. 대량의 데이터로 규모에 맞게 작업할 때 유효성 검사가 점점 더 중요해집니다.

Laravel은 애플리케이션을 통과하는 데이터의 무결성과 정확성을 보장하기 위해 수많은 유연한 접근 방식을 가능하게 합니다. 기본 및 사용자 지정 가능한 방법으로 복잡한 유효성 검사 논리를 달성하여 코드베이스를 잘 구성하고 더 쉽게 재사용할 수 있습니다.

Kinsta의 애플리케이션 호스팅 서비스로 Laravel 앱을 더 빠르게 배송하세요.