AddressRequest.php
public function rules()
{
return [
'street' => ['required', 'string'],
'number' => ['required', 'string'],
'city' => ['required', 'string'],
'postal_code' => ['required', 'string'],
'country' => ['required', 'string'],
];
}
AddressController.php
public function store(AddressRequest $request)
{
Address::create([
'street_name' => $request->street,
'house_number' => $request->number,
'postal_code' => $request->postal_code,
'city' => $request->city,
'country_id' => $request->country
])
}
上記のようなコードがあるとします。
これだと、コントローラー内で一つずつ値を整える必要があるので、冗長になってしまいます。
これを回避するために、formRequestクラス内で入力値を整えましょう。
prepareForValidation()
を使用することで、バリデーション実行前にリクエストに任意の処理を加えることができます。
AddressRequest.php
public function rules()
{
return [
// 整形後の名前に変える
'street_name' => ['required', 'string'],
'phone_number' => ['required', 'string'],
'city' => ['required', 'string'],
'postal_code' => ['required', 'string'],
'country_id' => ['required', 'string'],
];
}
// バリデーション前に実行される
public function prepareForValidation()
{
$this->merge([
'street_name' => $this->street,
'house_number' => $this->number,
'country_id' => $this->country,
]);
}
こうすることで、コントローラー内で値を整える必要がなくなり、
一行で記述することができます。
AddressController.php
public function store(AddressRequest $request)
{
Address::create($request->validated())
}