iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
Software Development

Laravel 新手初見 API系列 第 8

Day08-為了讓表單資料不要太過自大,給予其正確的絕望-Validation(I)

標題參考來源

大家好!
今天要來介紹 Laravel Validation~
Laravel 提供了多種驗證規則,
讓我們可以輕鬆的實作表單驗證功能。

required

表示該欄位為必填。

另外只要滿足以下四種條件之一,
即視為 Null 喔。

  1. The value is null.
  2. The value is an empty string.
  3. The value is an empty array or empty Countable object.
  4. The value is an uploaded file with no path.

其中 required 還有多種變化用法,
以下會將互為反義的放一起做個簡單介紹。

required_if / required_unless

  • required_if:anotherfield,value,…
    • 如果指定欄位等於指定 Value,則此欄位不可為空。
  • required_unless:anotherfield,value,...
    • 如果指定欄位不等於指定 Value,則此欄位不可為空。

required_with / required_without

  • required_with:foo,bar,...
    • 指定欄位有 present 且不為空時,則此欄位不可為空。
  • required_without:foo,bar,…
    • 指定欄位沒 present 且為空時,則此欄位不可為空。

required_with_all / required_without_all

  • required_with_all:foo,bar,…
    • 指定欄位全部都有 present 且不為空時,則此欄位不可為空。
  • required_without_all:foo,bar,…
    • 指定欄位全部都沒 present 且為空時,則此欄位不可為空。

nullable

表示該欄位可為空。

關於 Null 與空字串

app/Http/Kernel.php 中有兩個 global middleware 會將空字串一步步轉化成 Null。

src/Illuminate/Foundation/Http/Middleware/TrimStrings.php


該 Middleware 會清除字串頭尾的空白字符。
假如有長度8的空字串經過這個 Middleware,
就會被轉換成長度0的空字串。

src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php


該 Middleware 會將長度為0的空字串轉換成 Null。

經過上面兩個 Middleware 的轉換後,
再長的空字串都會被轉化成 Null
所以如果不想讓一些欄位因為 Value 是 Null 而被阻擋的話,
記得加上 nullable 喔。

present

表單內需有該欄位,
但可接受 Value 為 Null。

unique

  • unique:table,column,except,idColumn
    1. 第一個參數為資料表名稱或 Eloquent model
    2. 第二個參數為資料表欄位名稱

該用法我們在第二天實作會員註冊時有用到,
unique 會幫我們驗證表單欄位內的 Value 在指定的資料表欄位中是否為唯一值。

$request->validate([
    'email' => 'required|email|unique:users,email',
]);

exists

  • exists:table,column
    1. 第一個參數為資料表名稱或 Eloquent model
    2. 第二個參數為資料表欄位名稱

使用 exists 驗證欄位內的 Value 必須存在於指定的資料表欄位中。
下面的例子為驗證表單欄位中的 postId 必須存在 posts 資料表中。

$request->validate([
    'postId' => 'required|integer|exists:posts,id',
]);

regex

  • regex:pattern
    • 必須與正則匹配
  • not_regex:pattern
    • 必須與正則不匹配
$request->validate([
    'email' => ['required', 'regex:/^.+@.+$/i'],
]);

如果想在 Validation 中使用 regex,
請盡量使用陣列指定驗證規則,
特別是在正則內有 | 的時候。

今天就先這樣啦,
認識了一些驗證規則~
明天來認識如何將相同的表單驗證重複使用吧!
大家明天見啦~
若文章有任何問題,
還請大家不吝賜教!

參考資料:


上一篇
Day07-Response 最重要的是整整齊齊-API Resources
下一篇
Day09-為了讓表單資料不要太過自大,給予其正確的絕望-Validation(II)
系列文
Laravel 新手初見 API30

尚未有邦友留言

立即登入留言