驗證資料格式、設定系統語系

新增(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更好,在不正確得請求資料時,回傳錯誤訊息。


發佈留言