當User送出表單時,我們不能完全相信他送來的資料!想像一下,如果註冊帳號時有人輸入空白密碼,或是年齡輸入 -10,系統就會出大問題,這時候,Laravel 的 Validation(驗證) 就派上用場了
假設我們有一個註冊表單:
<form method="POST" action="/register">
@csrf
<input type="text" name="name" placeholder="姓名">
<input type="email" name="email" placeholder="Email">
<input type="password" name="password" placeholder="密碼">
<button type="submit">註冊</button>
</form>
public function store(Request $request)
{
$request->validate([
'name' => 'required|min:2|max:50',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:6'
]);
// 驗證通過才會執行到這裡
User::create($request->only('name', 'email', 'password'));
return redirect('/')->with('success', '註冊成功!');
}
users
表的 email
欄位不能重複@error('name')
<div class="text-red-500">{{ $message }}</div>
@enderror
@error('email')
<div class="text-red-500">{{ $message }}</div>
@enderror
💡這裡有個小技巧:可以用 @foreach
顯示所有錯誤:
@if ($errors->any())
<ul>
@foreach ($errors->all() as $error)
<li class="text-red-500">{{ $error }}</li>
@endforeach
</ul>
@endif
$request->validate([
'name' => 'required|min:2',
], [
'name.required' => '姓名是必填的!',
'name.min' => '姓名至少要 2 個字',
]);
如果 Controller 驗證規則很多,可以用 Form Request:
php artisan make:request StoreUserRequest
然後在 StoreUserRequest.php
:
public function rules()
{
return [
'name' => 'required|min:2|max:50',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:6'
];
}
Controller 就可以簡化:
public function store(StoreUserRequest $request)
{
User::create($request->validated());
return redirect('/')->with('success', '註冊成功!');
}
$request->validate()
是最常用的快速驗證方法@error
或 $errors->all()
在前端顯示