[PHP][Laravel] バリデーション前にデータを修正する

バージョン

Laravel 5.7

概要

例えば、画面に「年月日」と「時刻」の入力エリアがあり、
それらを連結してdatetimeとしてバリデーションしたい場合などで
バリデーション検証される前にデータを修正させる。

コード

■FormRequest

protected function getValidatorInstance()
{
    $data = $this->all();

    $data['datetime'] = $this->input('date') . ' ' . $this->input('time');
    $data['name'] = $this->input('name') . ' 様';

    $this->getInputSource()->replace($data);

    return parent::getValidatorInstance();
}

FormRequest側でgetValidatorInstanceをオーバーライドして
値を修正したり、追加する。

FormRequestのインプットデータ(request input data)を編集するので、編集されたデータをDB登録などに使うことができる。

ちなみにネットで調べるとcontroller側で以下のようにしているケースもあるが
Laravelのバージョンによってはバリデーションやoldで認識されないので注意が必要。

■Controller
※この方法はおすすめしない

    $data = $request->all();

    $data['datetime'] = $data['date'] . ' ' . $data['time'];
    $data['name'] = $data['name'] . ' 様';

    $request->replace($data);

    $values = $this->validate($request, $rules);



PHPフレームワーク Laravel入門

PHPフレームワーク Laravel入門