iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
0

胎嘎侯

今天的文件主題是Validation(驗證),筆者一開始接觸的時候,總是會把它跟Authentication(認證)的概念搞混,如果你剛接觸Laravel而且曾和我有一樣的疑惑,請記得Validation是資料驗證,Authentication是身分認證,這兩個是完全不同的東西啊!

Validation

相信大家都有註冊網站會員的經驗,是不是當我們未依照欄位格式或字數輸入時,網站會跳出「格式設定或必填欄位有缺漏將無法順利進行帳號註冊申請作業」的說明呢?沒錯,Validation就是針對我們輸入的資料,來確保用戶輸入的資料匹配後端預期的模式,一旦不匹配就會返回錯誤訊息或是導回某個頁面。

Stopping On First Validation Failure

bail的用途:

  • 如果'title'在unique的階段出現驗證失敗,bail就會停在這裡將不對max的格式進行檢查。
  • 雖然停在unique,但仍會按照分配順序跳行進行驗證。意即bail使程序不被中斷。
$request->validate([
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',
]);

A Note On Optional Fields

可選字段的註釋為資料驗證提供彈性。Laravel默認的全局middleware包括TrimStringsConvertEmptyStringsToNull,前者為前後空白字符清理,後者為空字符轉成null,這兩種方式都已在Kernel中註冊,因此如果不希望驗證程序將空值視為無效,需要彈性的可選請求字段的協助。

下面示例是將'publish_at'指定為可以是null或有效的日期表示形式,如果沒有加入修飾符nullable(可空類型)的規則定義,驗證會認為null為無效日期。

$request->validate([
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
    'publish_at' => 'nullable|date', //可空類型
]);

Manually Creating Validators

不使用validate method在request上的話,也可以改用Validatorfacade方式。facade的make方法產生一個新的validator實例。

實際建立註冊資料的Validation

1.定義路由
新增資料的HTTP Request Verb為post,寫在UserAuthController的Action為store方法。

Route::post('/register','UserAuthController@store');

2.控制器{編寫驗證邏輯}
先把request存入個別的屬性當中

class UserAuthController extends Controller
{
    public function store(Request $request) 
    {
        //$request->input()可以取得單一欄位的值
        
        $name = $request->input('name');
        $password = $request->input('password');
        $email = $request->input('email');
        $phone = $request->input('phone');
        $role = $request->input('role');
        $other_details = $request->input('other_details');
        $input = request()->all();
        //$request->all()//會給一個含有所有request輸入的陣列

接下來寫資料驗證邏輯,在這之前要先將use Validator寫在上方。

        //編寫資料驗證
        $rules=[
            'name'=>['required','max:10'],
            'password'=>['required','max:30'],
            'email'=>['required','max:20','email'],
            'phone'=>['required','max:10'],
        ];

傳遞給該make方法的第一個參數是正在驗證的數據。第二個參數是應該應用於數據的驗證規則。

    $validator = Validator::make($input,$rules);

編寫驗證流程

        //如果驗證fails就返回字串
        if($validator->fails()){
            return "您輸入的資料有誤";
        }
        
        //User資料庫新增通過驗證的資料
        
        $addUser = User::create([
            'name'=>$name,
            'password'=>$password,
            'email'=>$email,
            'phone'=>$phone, 
            'role'=>$role,
            'other_details'=>$other_details,
            'api_token'=>Str::random(15),
        ]);
        
        //驗證成功顯示json格式的response
        return response()->json($addUser);
    }
}

Available Validation Rules

文件後半段揭示所有可用驗證規則及其功能的列表,在功能說明也有提供建議使用的情形。
其實Validation還有好幾個部份沒寫上來,仍在理解當中,今天就到這啦~~明天見!


上一篇
Day17-Laravel新手基礎訓- The Basic Controller
下一篇
Day19-Laravel新手基礎訓-郵件驗證(Email Verification)
系列文
後端PHP+Laravel--新手實戰日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言