11.表單驗證
首先我們新建個路由
Route::match(['get','post'], 'register', 'IndexController@register');
對match陌生嗎?可以去看看路由章節,因爲需要register自己處理get和post兩種請求,所以我們使用match。
接着我們新建對應的register方法
public function register()
{
return view('home.index.register');
}
視圖
<form method="post" action="{{url('register')}}">
<p>username:<input type="text" name="username"/></p>
<p>password:<input type="password" name="password"/></p>
<p>{{ csrf_field() }}
<input type="submit" value="submit"></p>
</form>
別忘了表單令牌。
添加驗證規則
如何驗證?其實Laravel已經提供我們便捷的驗證方式。
控制器方法
public function register(Request $request)
{
if ($request->method() == 'POST') {
$this->validate($request, [
'username'=>'required|alpha_dash|min:6',
'password'=>'required|alpha_dash|min:6',
]);
}
return view('home.index.register');
}
當請求爲POST的時候,我們通過validate方法來進行表單字段的驗證。第二個參數是一個數組,用來定義需要驗證的字段。鍵名爲字段名稱,鍵值爲需要驗證的類別。例如上述就是驗證字段名稱爲username和password,驗證內容爲
required:驗證的字段必填
alpha_dash:驗證的字段只能包含字母、數字、破折號( - )以及下劃線( _ )
min:6:驗證的字段最小爲6位
每種驗證規則以 | 隔開。
以上的驗證規則均爲Laravel內置的規則,更多規則可以參考這裏。
雖然書寫了驗證規則,但是點擊提交按鈕的時候除了頁面刷新了,其它好像什麼都沒發生過一樣,如何知道已經驗證了,如何知道爲什麼沒有通過驗證呢?
顯示錯誤信息
我們可以通過$errors來顯示錯誤信息。
對應視圖
@if (count($errors) > 0)
<div>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form method="post" action="{{url('register')}}">
<p>username:<input type="text" name="username"/></p>
<p>password:<input type="password" name="password"/></p>
<p>{{ csrf_field() }}
<input type="submit" value="submit"></p>
</form>
關於$errors如何使用,文檔表單驗證中的顯示驗證錯誤給我們一個例子,我們可以結合起來。
此時再次提交,如果輸入的內容不符合要求,則會出現錯誤提示。例如我們都輸入@@@,則會出現錯誤提示如下
The username may only contain letters, numbers, and dashes.
The username must be at least 6 characters.
The password may only contain letters, numbers, and dashes.
The password must be at least 6 characters.
居然出現了4條錯誤信息,雖然username和password確實不滿足alpha_dash和min:6這兩種驗證規則,但是一般情況,我們在字段在第一次驗證失敗後就不會繼續驗證了,Laravel可以實現嗎,答案是肯定的。
只顯示第一條不滿足規則的錯誤信息
控制器方法
public function register(Request $request)
{
if ($request->method() == 'POST') {
$this->validate($request, [
'username'=>'bail|required|alpha_dash|min:6',
'password'=>'bail|required|alpha_dash|min:6',
]);
}
return view('home.index.register');
}
我們只需要添加bail規則到對應的字段即可,此時我們再次輸入@@@提交,錯誤提示如下
The username may only contain letters, numbers, and dashes.
The password may only contain letters, numbers, and dashes
只出現了不滿足要求的第一個規則的提示了。