新增(C) 查詢(R) 修改(U) 刪除(D) 都完成了!
但應該會發現一件事情,再新增以及修改的形況下,會有一點錯誤!
可以先嘗試看看
POST /api/animal
Headers 一樣給 json 格式回傳,但Body 裡面不要給任何值!
應該會出現錯誤!表示後端程式想要嘗試寫入不符合規定的值到資料表中!
所以需要做後端的表單檢查,Laravel 有一套驗證系統,設定的規則可以看官網文件。
AnimalController
中的 store
方法裡一開頭加入
public function store(Request $request)
{
$this->validate($request, [
'type_id' => 'required',
'name' => 'required|max:255',
'birthday' => 'required|date',
'area' => 'required|max:255',
'fix' => 'required|boolean',
'description' => 'nullable',
'personality' => 'nullable'
]);
//其他原本的程式略過
}
規格變數 | 說明 |
---|---|
required | 必填欄位 |
nullable | 非必填欄位 |
max:255 | 最大255值 |
date | 檢查是否為日期格式,利用 PHP strtotime 函數檢查字段 |
boolean | 只能輸入 true false 1 0 "1" "0" |
其他請參考
https://laravel.com/docs/5.8/validation#available-validation-rules
驗證失敗回傳結果
什麼是英文的!我故意把 birthday 、fix 欄位的值輸入錯誤格式,雖然有正確回傳資料錯誤的訊息,不過是英文的敘述!
修改預設Laravel系統語系
再專案中找到下方路徑,並搜尋三個 key
locale、fallbacklocale、fakerlocale 修改為繁體中文。
/animal/config/app.php
//略過其他程式碼
'locale' => 'zh-Hant-TW', //系統預設語系
//略過其他程式碼
'fallback_locale' => 'zh-Hant-TW', //如果使用者設定,系統並沒有該語系,會使用這個邊設定的值
//略過其他程式碼
'faker_locale' => 'zh_TW', //生成假資料的語系格式
修改如上3個值!下載繁體中文語言包,可以參考下面的 GitHub 網址:
https://github.com/caouecs/Laravel-lang
裡面已經有好心人士翻譯各種語言
把它下載回來 src
資料夾裡面有各式各樣的翻譯,把 zh-TW
資料夾複製到的 animal/resources/lang
的資料夾中,剛剛我設定 zh-Hant-TW
所以也把資料夾重新命名 zh-TW -> zh-Hant-TW
再重新送一次請求,驗證的錯誤訊息就會變中文的囉!
如果還是英文的!執行下方指令清除config快取試試看,應該就可以正常運作!
php artisan config:cache
可以看到 birthday 、fix 是英文的,我們自己來修改一下語言包
animal/resources/lang/zh-Hant-TW/validation.php
'attributes' => [
...
'birthday' => '生日',
'fix' => '結紮紀錄',
]
修改功能(Update) 也是一樣的步驟,可以讓API更好,在不正確得請求資料時,回傳錯誤訊息。