1
0

【Laravel】フォームリクエストで複数フィールドをまとめてバリーでションする方法

Posted at

環境

Laravel v8

問題

以下のように電話番号をブロックごとに分けて管理しているとします。
tel1 - tel2 - tel3

今回の例ではこの3つのフィールドを合わせて11桁までにするといったバリデーションをかけたいとします。

その場合、3つのフィールドを一つのものとして扱う必要がありますが、Laravelの標準バリデーションルールにはそのようなものに対応する方法はありません。

解決法

方針

  • リクエストクラス内で三つのフィールドをくっつけた値を追加する。
  • 追加された値に対してrules配列の中で適応したいルールを記述する。

実装

リクエストクラス
validationData メソッドをオーバーライドし、リクエストがバリデーションされる直前に3つの値をくっつけて新たな値を作り、それをマージするといった段取りです。

public function attributes()
{
    return [
        "tel_all" => "電話番号",
    ];
}

/**
 * @inheritDoc
 */
public function validationData()
{
    $this->addTelAll();
    return parent::validationData();
}

/**
 * To validate for whole tel number
 */
private function addTelAll()
{
    $tel1 = $this->request->get('tel1');
    $tel2 = $this->request->get('tel2');
    $tel3 = $this->request->get('tel3');

    $telAll = $tel1 . $tel2 . $tel3;
    $this->merge([
        'tel_all' => $telAll,
    ]);
}

public function rules()
{
		$rules = [
			'tel_all' => 'required|numeric|digits_between:1,11',
		];

		return $rules;
}

参考

1
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
1
0