リクエストデータを配列で渡せることを知って、「DBと対応していないフィールドを作る必要がなくなる!!」と思った矢先に「配列のデータに対するvalidationのかけ方が分からない!!」という問題にぶつかりました。
なかなか有益な情報が得られず困っていましたが、英語で検索してみるとすぐに見つかりました。
やはり日本語に固執しすぎるのは良くありませんね。
リクエストデータを配列で渡す
まずは、配列で渡したいフィールドを配列の形で書きます。
(この時 "user_name['last']"のように記述するとvalidationが効かなくなります。)
<div class="form-group row">
{!! Form::label('user_name[last]', '氏名(性):', ['class' => 'control-label']) !!}
{!! Form::text('user_name[last]', null, ['class' => 'form-control', 'placeholder' => 'Last Name']) !!}
</div>
<div class="form-group row">
{!! Form::label('user_name[first]', '氏名(名):', ['class' => 'control-label']) !!}
{!! Form::text('user_name[first]', null, ['class' => 'form-control', 'placeholder' => 'First Name']) !!}
</div>
配列のバリデーション
配列名.キー名を指定するだけで配列のバリューにバリデーションをかけることができます。
class CreateUserRequest extends Request {
public function authorize()
{
return true;
}
public function rules()
{
return [
'email' => 'required|email',
'user_name.last' => 'required|max:32',
'user_name.first' => 'required|max:32',
'gender' => 'required',
'password' => 'required|between:6,12|confirmed'
];
}
}
まとめ
前回の投稿にも書きましたが、ユーザ名の性と名や、範囲の始点と終点など、複数のフィールドが必要だけど、実際にDBに登録するのはひとつのカラムで十分と言った場合、配列を使った方がデータを処理しやすくなります。
配列へのバリデーションは、公式ドキュメントには載っていなく?あまり日本語のドキュメントでヒットしない内容ですが、フィールドを配列で記述することで、扱いやすいデータもあると思います。そんな時にバリーデーションは必ず、使用するので知っていてそんはない知識だと思います。
謝辞
最後まで読んでいただき、まことにありがとうございます。
次の投稿では他フィールドの値をあるフィールドのバリデーションで使用することについて投稿したいと思います。