LoginSignup
0
0

More than 1 year has passed since last update.

[Laravel]バリデーション前に値を整える

Posted at
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())
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0