Day23-從基礎學習 ThinkPHP-表單驗證(1)
前言
當我們送出一些表單的時候,都會有一些表單驗證的機制,那 ThinkPHP 呢?ThinkPHP 本身也有表單驗證功能,所以這一篇就會來介紹該如何使用 ThinkPHP 內建的表單驗證機制。
起手式
首先為了讓表單驗證可以看出所以然,所以這邊起頭要來建立一個新的資料表,專門存放帳號,SQL 語法就提供給各位:
1 | CREATE TABLE think_account ( |
然後接下來建立 user 資料夾,並於 view 底下建立兩個頁面,分別為註冊頁面 (signup.html) 與登入頁面 (signin.html),內容我就不再額外提供 ↓
那麼畫面就會像這樣子 ↓
路由與控制器部分我也不再額外提供,因為這部分撰寫很多次了。
表單驗證
首先 ThinkPHP 本身就有提供表單驗證的功能,只需要引入該函式庫就可以了:
1 | use think\Validate; |
但是 ThinkPHP 在這邊的做法稍微有點不太一樣,它會需要建立一個資料夾放置驗證用的原始碼,所以就要這樣建立 user/validate/user.php
↓
那麼 user.php
這個檔案內容如下:
1 |
|
首先程式碼裡面有兩個變數 $rule
、$message
,$rule
代表的是要驗證的欄位以及規則,而 $message
則是顯示錯誤訊息,那麼我們有需要填入的欄位共三個,分別為 email
、password
、gender
,另外 $rule
是採用陣列的方式,所以就可以這樣撰寫 $rule
:
1 | protected $rule = [ |
多個驗證就用 |
分隔即可,如上述。
那麼提示訊息呢?當你驗證方式越多自然要會傳給使用者的訊息就會跟著越多,雖然系統有默認自定義提示訊息,但是還是建議自己寫提示訊息會比較好:
1 | protected $message = [ |
這樣我們就將表單驗證給完成了。
控制器
接下來要來修改控制器,首先我們會將表單接收的方法寫到 add()
方法內,然後會回傳我們剛剛發送的資料:
1 | public function add($email, $password, $gender) { |
那麼該如何使用表單驗證呢?只需要加上一段 validate('資料','驗證器名稱')
即可搞定,這邊我順便接上資料庫,這樣才能夠看出真實性:
1 | public function add($email, $password, $gender) { |
這時候當我直接不填任何直接送出,就可以直接看到驗證畫面 ↓
最後我相信你會覺得這樣寫很煩:
1 | public function add($email, $password, $gender) { |
所以我們可以將這一段程式碼給簡化,可以不用再函示上面設置變數接收表單資料,只需要使用 input()
,先讓我們把程式碼修改一下變成這樣,然後來看這樣是否成功(json()
只是方便我們呈現資料在畫面上的一個方法而已):
1 | public function add() { |
所以我們就可以不用替函式設置變數,直接透過 input()
來取得表單欄位資料即可,但是這邊我們還可以更進一步的簡化儲存到資料庫的語法:
1 | public function add() { |
另外 ThinkPHP 還有提供一個功能,也就是批量驗證,預設只要遇到一個表單欄位沒有符合驗證規則就會直接跳掉,然後你就不知道其他欄位到底是否正確,那麼只需要在程式最前面加入一行 protected $batchValidate = true;
即可搞定,但是要注意此時的 $result
將會輸出陣列,若直接輸出將會出現錯誤,所以請記得要轉成 JSON 格式:
1 | protected $batchValidate = true; |
結尾
這一章節先到這裡結束,已累。
但是基礎的表單驗證已經製作完成,那也因為寫太長所以拆成了兩個部分,接下來下一篇將會介紹將錯誤訊息回傳到前端畫面上。