Laravel使用記錄(八)表單驗證(一)

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

只出現了不滿足要求的第一個規則的提示了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章