質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

2810閲覧

【Laravel5.7】2つのフィールドの合計サイズのvalidation

tajihiro

総合スコア14

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/02/09 16:19

編集2019/02/09 16:20

郵便番号の入力フィールドが、上3桁と下4桁で作られています。

HTML

1<input type="text" name="post01"> 2<input type="text" name="post02">

この入力フィールドの数値と長さチェックのValidationを、FormRequestを継承したクラス内で、1つのリクエストとして扱って検証したいのですが方法がわかりません。

とあるサイト情報から、下記のように、function all($keys = null)を、Overwrite して試したのですが、バリデーションが効きませんでした。

php

1 public function all($keys = null) 2 { 3 $result = parent::all($keys); 4 if($this->filled('post01') && $this->filled('post02')) { 5 $results['postal_code'] = $this->input('post01') . $this->input('post02'); 6 } 7 return $result; 8 }

何か良い方法はあるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

方法は合っていると思いますが、返す値が$resultなのにここが$resultsになっているからではないでしょうか。

php

1$results['postal_code'] = $this->input('post01') . $this->input('post02');

ただし、つなげた値をバリデーションにのみ使用するのなら、allではなくvalidationDataをoverrideする方がいいような気がします。(影響範囲を限定する意味で)

投稿2019/02/10 01:00

crhg

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tajihiro

2019/02/10 03:07

ありがとうございます。うまく行きました。 参考までに「つなげた値をバリデーションにのみ使用するのなら、`all`ではなく`validationData`をoverrideする」場合の実装はどのようになるのでしょうか? `all` と同じく、`$result['postal_code']` を返せばよいのでしょうか?
crhg

2019/02/10 05:35

やるべきことはほぼ一緒です。 ```php protected function validationData() { $result = parent::validationData(); if($this->filled('post01') && $this->filled('post02')) { $result['postal_code'] = $this->input('post01') . $this->input('post02'); } return $result; } ``` `all`は他でも使われる可能性があるけれども、`validationData`はバリデータにバリデーション対象となるデータを与えるのに使うだけなので影響範囲を限定できるということです。 ちなみに`FormRequest`クラスでの元の定義はこうなっています。 ```php /** * Get data to be validated from the request. * * @return array */ protected function validationData() { return $this->all(); } ```
tajihiro

2019/02/10 07:24

$result = parent::validationData(); の戻り値も同じなんですね。 わかりやすい説明ありがとうございました。
guest

0

リクエストデータをマージしたらどうでしょうか?

php

1 public function store(Request $request) 2 { 3 $request->merge([ 4 'post' => $request->post01 . $request->post02, 5 ]); 6 7 $request->validate([ 8 'post' => 'min:7|max:7' 9 ]); 10 11 return $request->all(); 12 }

レスポンスがこうなります。

json

1{ 2"post01": "123", 3"post02": "4567", 4"post": "1234567" 5}

投稿2019/02/10 00:04

編集2019/02/10 00:05
Bremenkanp

総合スコア205

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問