iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
Software Development

Laravel 新手初見 API系列 第 9

Day09-為了讓表單資料不要太過自大,給予其正確的絕望-Validation(II)

標題參考來源

大家好~
如果有個表單驗證需要大量重複使用的話,
我們可以為此表單驗證建立一個 FormRequest class。
接下來的實作內容就用 Day05 做好的留言板表單驗證當作例子吧!

建立 FormRequest

php artisan make:request MessageValidation

建立好的 FormRequest class 會在 app/Http/Requests 下喔。

實作 FormRequest

首先將 authorize()return false 改成 return true

public function authorize()
{
    return true;
}

rules()

將我們想使用的驗證規則寫在 rules() 這個 function 內吧!

public function rules()
{
    return [
        'title' => 'required|string|max:50',
        'content' => 'required|string|between:2,255'
    ];
}

messages()

如果有想自定義的錯誤訊息,
可以在我們建立的 FormRequest class 內建立一個 messages()
然後把自定義的錯誤訊息內容寫在這個 function 內。

public function messages()
{
    return [
        'required' => ':attribute 未填。',
        'string' => ':attribute 格式不支援。',
        'between' => ':attribute 文字長度請在:min至:max間。',
        'max' => ':attribute 文字長度請在:max以內。',
    ];
}

如果是想針對一個欄位上的規則去做自定義的錯誤訊息,
可以在規則前面加上欄位名稱,
並用 . 連接。
如:

    return [
        'title.max' => ':attribute 文字長度請在:max以內。',
    ];

關於佔位符

自定義的錯誤訊息內有提供一些佔位符供我們使用,
上面用到的 :attribute:min:max 都是佔位符。
如果需要其他佔位符的用法可參考官方文件

自定義錯誤訊息成果預覽


完成後的自定義錯誤訊息大概是像這樣子~

使用 FormRequest

先在 Controller 內 use 我們的 FormRequest class。

use App\Http\Requests\MessageValidation;

然後將原本 type-hint 的 Request 改成我們要使用的 FormRequest class,
這樣傳入的資料就會是做完表單驗證的資料囉。
下面是用新增留言功能作為例子:

public function store(MessageValidation $request)
{
    $validated=$request->validated();

    $message = Auth::user()->messages()->create($validated);

    return response(MessageResource::make($message), Response::HTTP_CREATED);
}

今天就先這樣啦,
明天來認識如何不用另外建立 FormRequest class 也能自定義錯誤訊息的方式吧!
大家明天見啦~
若文章有任何問題,
還請大家不吝賜教!

參考資料:


上一篇
Day08-為了讓表單資料不要太過自大,給予其正確的絕望-Validation(I)
下一篇
Day10-為了讓表單資料不要太過自大,給予其正確的絕望-Validation(III)
系列文
Laravel 新手初見 API30

尚未有邦友留言

立即登入留言