라라벨에서 요청(Request) 데이터를 유효성 검사를 하는 방법은?
_____A1: 라라벨에서는 컨트롤러 내에서 `validate` 메서드를 사용해 쉽게 요청 데이터를 유효성 검사할 수 있습니다. 예를 들어:
```php
public function store(Request $request) {
$validatedData = $request->validate([
'title' => 'required|string|max:255',
'email' => 'required|email',
'age' => 'nullable|integer|min:18',
]);
// 유효성 검사 통과 시 $validatedData 사용 가능
}
```
---
Q2: 유효성 검사 규칙을 정의할 때 어떤 규칙들을 사용할 수 있나요?
A2: 라라벨은 다양한 유효성 규칙을 제공합니다.
- `required`: 필수 입력
- `string`: 문자열
- `max:255`: 최대 길이 255
- `min:3`: 최소 길이 3
- `email`: 이메일 형식
- `integer`: 정수형
- `nullable`: 값이 없어도 됨
- `unique:users,email`: 데이터베이스 내 중복 체크
- `confirmed`: 비밀번호 확인과 같은 검증 때 유용
그 외 상세한 규칙은 라라벨 공식 문서 참고가 권장됩니다.
---
Q3: 요청 데이터를 별도의 폼 리퀘스트 클래스로 유효성 검사를 할 수 있나요?
A3: 네, `php artisan make:request StoreUserRequest` 명령어로 폼 리퀘스트 클래스를 생성한 후, `rules()` 메서드에서 유효성 검사를 정의합니다. 컨트롤러 메서드 파라미터로 해당 클래스를 타입힌트하면 자동으로 검사가 적용됩니다.
```php
class StoreUserRequest extends FormRequest {
public function rules() {
return [
'name' => 'required|string|max:100',
'email' => 'required|email|unique:users,email',
}
public function authorize() {
return true; // 권한 체크 로직
}
}
// 컨트롤러에서
public function store(StoreUserRequest $request) {
$validated = $request->validated();
// 저장 처리
}
```
---
Q4: 유효성 검사 실패 시 기본 동작은 어떻게 되나요?
A4: 기본적으로 웹 요청 시 유효성 검사 실패하면 이전 페이지로 리다이렉트되면서 오류 메시지가 세션에 담기고, 입력값도 함께 플래시됩니다. API 요청(예: JSON)이라면 422 상태 코드와 함께 JSON 형식의 오류 메시지가 반환됩니다.
---
Q5: 유효성 검증에서 복잡한 조건문(예: 다른 입력값에 의존한 조건)도 가능한가요?
A5: 가능합니다. `sometimes` 규칙, 클로저, 커스텀 룰, `bail`, `required_if` 등 다양한 규칙을 합쳐 복잡한 조건을 처리할 수 있습니다. 예:
```php
'discount' => 'required_if:is_member,true|integer|min:0|max:100'
```
---
Q6: 커스텀 유효성 규칙을 만들려면?
A6: `php artisan make:rule CustomRule` 명령어로 클래스를 만들고, `passes()` 메서드 내에서 커스텀 검증 로직 작성 후, 유효성 검사 시 `'field' => ['required', new CustomRule()]`와 같이 사용하면 됩니다.
---
요약
- `$request->validate()` 메서드로 간단히 유효성 검사 가능
- 폼 리퀘스트 클래스로 구조적이고 재사용 가능한 검증 가능
- 다양한 내장 규칙과 커스텀 규칙 지원
- 실패 시 자동 리다이렉션 또는 JSON 오류 반환 처리
- 복잡한 조건도 규칙 조합 및 커스텀 룰로 대응 가능
작성자:
ㅁㅁ [비회원]
| 작성일자: 1년 전
2024-08-26 08:17:05
조회수: 155 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 155 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.