카테고리 없음

laravel 라라벨 유효성 검사 validator

백위한 2024. 5. 9. 22:13

validator()

validator 함수는 주어진 인자를 통해 새로운 validator 인스턴스를 생성한다.

Validator 파샤드 대신 사용할 수 있다.

 

$validator = validator($data, $rules, $messages);

 

 

유효성 검사 규칙을 단일 규칙이 아닌 규칙 배열로 지정할 수도 있다.

 

$validatedData = $request->validate([
    'title' => ['required', 'unique:posts', 'max:255'],
    'body' => ['required'],
]);

 

또한 validateWithBag 메서드를 사용하여 요청의 유효성을 검사하고 에러 메시지를 named error bag 내에 저장할 수 있다.

 

$validatedData = $request->validateWithBag('post', [
    'title' => ['required', 'unique:posts', 'max:255'],
    'body' => ['required'],
]);

 

 

라라벨은 유효성 검사를 통과하지 못하면 사용자를 이전 위치로 리디렉션한다. 또한 모든 유효성 검사 오류와 요청 입력이 자동으로 세션에 플래시된다.

오류 변수는 web 미들웨어 그룹에 의해 애플리케이션의 모든 뷰가 공유된다.

이 미들웨어가 적용되면 뷰에서 $error 변수를 항상 사용할 수 있다.

 

아래 예제에서 유효성 검사에 실패하면 사용자가 컨트롤러의 show 메서드로 리디렉션되어 뷰에 오류 메세지를 표시할 수 있다.

<!-- resources/views/board/show.blade.php -->

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

 

validator 인스턴스의 errors 메서드를 호출하면 에러 메시지를 사용할 수 있는 다양한 메서드를 가진 MessageBag 인스턴스를 받을 수 있다.

$errors 변수는 자동으로 모든 뷰에서 MessageBag 클래스 인스턴스로써 사용 가능하다.

 

모든 필드에 대한 모든 에러 메세지를 조회하기 위해서는 all 메서드를 사용한다.

foreach ($errors->all() as $message) {
    //
}

 

form request 사용자 승인

form request 클래스에는 authorize 메서드도 포함되어 있다.

이 메서드 내에서 인증된 사용자에게 실제로 주어진 리소스를 업데이트할 권한이 있는지 확인할 수 있다.

 

use App\Models\Comment;

/**
 * Determine if the user is authorized to make this request.
 *
 * @return bool
 */
public function authorize()
{
    $comment = Comment::find($this->route('comment'));

    return $comment && $this->user()->can('update', $comment);
}

 

모든 form request는 기본 라라벨 요청 클래스를 확장하므로 user 메서드를 사용하여 현재 인증된 사용자에 액세스할 수 있다.

위 메서드는 아래 예의 {comment} 매개변수와 같이 호출되는 경로에 정의된 URI 매개변수에 대한 액세스 권한을 부여한다.

 

Route::post('/comment/{comment}');

 

따라서 애플리케이션이 경로 모델 바인딩을 활용하는 경우, 확인된 모델을 요청의 속성으로 액세스하여 코드를 간결하게 만들 수 있다.

 

return $this->user()->can('update', $this->comment);

 

authorize 메서드가 false를 반환하면 403 상태 코드가 포함된 HTTP 응답이 자동으로 반환되고 컨트롤러 메서드가 실행되지 않는다.