iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
Modern Web

Laravel 30天速成筆記系列 第 13

【Day13】Laravel 驗證(Validation)

  • 分享至 

  • xImage
  •  

當User送出表單時,我們不能完全相信他送來的資料!想像一下,如果註冊帳號時有人輸入空白密碼,或是年齡輸入 -10,系統就會出大問題,這時候,Laravel 的 Validation(驗證) 就派上用場了


Laravel 驗證的用途

  • 確保資料的正確性(Email 格式、長度限制)
  • 避免惡意資料(XSS、SQL Injection)
  • 提升使用者體驗(讓使用者即時知道哪裡輸入錯了)

驗證的基本用法

假設我們有一個註冊表單:

<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>

Controller 驗證寫法

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', '註冊成功!');
}

驗證規則解釋

  • required → 必填
  • min:2 / max:50 → 長度限制
  • email → 必須是 Email 格式
  • unique:users,emailusers 表的 email 欄位不能重複

驗證失敗時會.....

  • Laravel 會自動把錯誤訊息存到 session
  • 頁面會被重新導向(redirect)
  • 我們可以在 Blade 顯示錯誤

Blade 顯示錯誤訊息

@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 個字',
]);

在 Form Request 中集中驗證

如果 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() 是最常用的快速驗證方法
  • 驗證失敗會自動 redirect 回上一頁並帶錯誤訊息
  • 可用 @error$errors->all() 在前端顯示
  • 規則多時建議用 Form Request 讓程式更乾淨!

上一篇
【Day12】Laravel Model 關聯(Many-to-Many、HasManyThrough)
下一篇
【Day14】Laravel Middleware 與請求攔截
系列文
Laravel 30天速成筆記16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言