
PHP 프레임워크 – Laravel – 폼 처리와 검증
안녕하세요 여러분~ 😊
이번 시간에는 Laravel 개발에서 아주 자주 사용되는 **폼 처리(Form Handling)**와 **데이터 검증(Validation)**에 대해 배워볼 거예요.
사용자가 웹 페이지에서 정보를 입력하고 제출하는 순간!
바로 그때 Laravel의 폼 처리와 검증 기능이 빛을 발한답니다 🌟
Laravel에서는 복잡하고 귀찮을 수 있는 폼 입력 처리 과정을
간단하고 안전하며 효율적으로 만들 수 있는 도구들을 아낌없이 제공하고 있어요.
왜 폼 처리와 검증이 중요할까요?
💡 비유하자면?
웹사이트에 입력 폼이 있다면,
사용자는 ‘편지’를 보내는 사람이고,
우리는 Laravel을 통해 그 편지가 잘 썼는지, 맞춤법이 틀리지 않았는지 확인하고
잘 전달되도록 도와주는 역할을 하는 거죠! ✉️✅
1. HTML 폼 만들기 (Blade에서)
Laravel에서 일반적인 HTML 폼을 작성해봅시다.
<form action="/contact" method="POST">
@csrf
<label>이름:</label>
<input type="text" name="name"><br>
<label>이메일:</label>
<input type="email" name="email"><br>
<label>메시지:</label>
<textarea name="message"></textarea><br>
<button type="submit">보내기</button>
</form>
✅ @csrf
는 무엇인가요?
- CSRF 공격 방지 토큰입니다.
- Laravel은 보안을 위해 POST 요청 시 이 토큰이 없으면 오류를 발생시켜요.
2. 라우트 등록하기
routes/web.php
에 라우트를 등록해줘야겠죠?
use App\Http\Controllers\ContactController;
Route::post('/contact', [ContactController::class, 'submit']);
3. 컨트롤러에서 폼 데이터 받기
컨트롤러에서 요청 데이터를 받을 수 있어요.
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ContactController extends Controller
{
public function submit(Request $request)
{
$name = $request->input('name');
$email = $request->input('email');
$message = $request->input('message');
// 여기에 데이터 저장, 이메일 발송 등 처리 가능
return back()->with('success', '문의가 성공적으로 접수되었습니다!');
}
}
input()
은 폼에서 전송된 값을 가져오는 Laravel의 편리한 메서드랍니다 😊
4. 데이터 검증(Validation) 하기
사용자 입력을 무작정 받아들이면 보안에도, 사용자 경험에도 큰 문제가 발생할 수 있어요.
Laravel에서는 이런 입력값들을 쉽게 검증할 수 있어요!
$request->validate([
'name' => 'required|max:50',
'email' => 'required|email',
'message' => 'required|min:10',
]);
유효성 검사에 실패하면 자동으로 이전 페이지로 리디렉션되고, 에러 메시지를 보여줘요.
5. 에러 메시지 출력하기
Blade 템플릿에서 유효성 에러를 출력하는 방법은 정말 간단해요!
@if ($errors->any())
<div style="color:red;">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
Laravel은 자동으로
$errors
변수를 뷰에 공유해줘서 사용이 쉬워요!
6. 성공 메시지 출력하기
성공적인 제출 메시지를 보여줄 수도 있어요.
@if (session('success'))
<div style="color:green;">
{{ session('success') }}
</div>
@endif
return back()->with('success', '문의가 성공적으로 접수되었습니다!');
에서 넘어온 메시지를 출력합니다.
7. 유효성 규칙 정리
규칙 | 설명 |
---|---|
required |
필수 입력 |
email |
유효한 이메일 형식 |
min:value |
최소 글자 수 |
max:value |
최대 글자 수 |
confirmed |
동일한 값 확인용 (ex. 비밀번호 확인) |
unique:table |
DB에서 유일한 값 여부 확인 |
numeric |
숫자 입력만 허용 |
regex:/정규표현식/ |
형식 제어 |
8. 커스텀 에러 메시지 설정
좀 더 친절한 에러 메시지를 제공하고 싶을 때는 이렇게 설정할 수 있어요!
$request->validate([
'name' => 'required',
'email' => 'required|email',
], [
'name.required' => '이름을 입력해 주세요.',
'email.required' => '이메일 주소를 입력해 주세요.',
'email.email' => '이메일 형식이 올바르지 않습니다.',
]);
9. Request 클래스로 검증 분리하기 (폼 요청 전용 클래스)
컨트롤러가 너무 복잡해질 경우, 전용 폼 요청 클래스를 만들 수 있어요.
php artisan make:request ContactRequest
app/Http/Requests/ContactRequest.php
파일이 생성됩니다.
public function rules()
{
return [
'name' => 'required|max:50',
'email' => 'required|email',
'message' => 'required|min:10',
];
}
public function messages()
{
return [
'name.required' => '이름은 필수 항목입니다.',
'email.email' => '이메일 형식을 지켜 주세요!',
];
}
그리고 컨트롤러에서는 이렇게 바꿔주면 끝!
public function submit(ContactRequest $request)
{
// 자동으로 유효성 검사 완료됨
}
10. old() 함수로 입력값 유지하기
폼에 입력한 값이 에러 후 사라지면 사용자 입장에서 불편하겠죠?
<input type="text" name="name" value="{{ old('name') }}">
에러 발생 시 이전에 입력한 값을 유지시켜줍니다 😊
주의할 점 ✅
항목 | 설명 |
---|---|
CSRF 토큰 | POST, PUT, DELETE 요청에는 반드시 @csrf 필요 |
에러 출력 | $errors->any() 또는 특정 필드만 출력 가능 |
자동 리디렉션 | validate() 실패 시 자동 리디렉션됨 |
입력값 유지 | old() 함수로 사용자가 작성한 값 유지 |
사용자 친화 메시지 | 커스텀 메시지로 더 나은 UX 제공 가능 |
요약 정리 🎯
항목 | 설명 |
---|---|
폼 작성 | HTML로 기본 폼 구성, @csrf 필수 |
입력 받기 | $request->input() 또는 $request->all() 사용 |
유효성 검사 | $request->validate() 또는 FormRequest 사용 |
에러 출력 | $errors 활용한 블레이드 에러 메시지 |
메시지 유지 | session() , old() 로 상태 전달 |
마무리하며 😊
폼은 웹사이트에서 가장 중요한 소통 창구입니다.
사용자가 데이터를 입력하고 제출하는 그 순간,
우리는 Laravel의 강력한 도구로 그 데이터를 안전하게 다룰 수 있어야 해요!
Laravel의 검증 시스템을 잘 활용하면
에러는 줄이고, 신뢰는 올리는 웹 애플리케이션을 만들 수 있답니다 🛡️💬
다음 시간에는 라우팅 + 컨트롤러 + 뷰 + 모델을 연결한 CRUD 구현을 함께 해볼 거예요!
그럼 오늘도 Laravel과 함께 즐겁고 튼튼한 개발 하시길 바랄게요~ 🙌💻✨