胎嘎侯
今天的文件主題是Validation(驗證),筆者一開始接觸的時候,總是會把它跟Authentication(認證)的概念搞混,如果你剛接觸Laravel而且曾和我有一樣的疑惑,請記得Validation是資料驗證,Authentication是身分認證,這兩個是完全不同的東西啊!
相信大家都有註冊網站會員的經驗,是不是當我們未依照欄位格式或字數輸入時,網站會跳出「格式設定或必填欄位有缺漏將無法順利進行帳號註冊申請作業」的說明呢?沒錯,Validation就是針對我們輸入的資料,來確保用戶輸入的資料匹配後端預期的模式,一旦不匹配就會返回錯誤訊息或是導回某個頁面。
bail
的用途:
bail
就會停在這裡將不對max的格式進行檢查。bail
使程序不被中斷。$request->validate([
'title' => 'bail|required|unique:posts|max:255',
'body' => 'required',
]);
可選字段的註釋為資料驗證提供彈性。Laravel默認的全局middleware包括TrimStrings
和ConvertEmptyStringsToNull
,前者為前後空白字符清理
,後者為空字符轉成null
,這兩種方式都已在Kernel中註冊,因此如果不希望驗證程序將空值視為無效,需要彈性的可選請求字段的協助。
下面示例是將'publish_at'
指定為可以是null或有效的日期表示形式,如果沒有加入修飾符nullable(可空類型)的規則定義,驗證會認為null為無效日期。
$request->validate([
'title' => 'required|unique:posts|max:255',
'body' => 'required',
'publish_at' => 'nullable|date', //可空類型
]);
不使用validate method在request上的話,也可以改用Validator
facade方式。facade的make
方法產生一個新的validator實例。
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);
}
}
文件後半段揭示所有可用驗證規則及其功能的列表,在功能說明也有提供建議使用的情形。
其實Validation還有好幾個部份沒寫上來,仍在理解當中,今天就到這啦~~明天見!