前提・実現したいこと
Laravel5.7で入力フォームを作成しています。
今回の課題の項目Aは連想配列のJSONテキストがセットされます。
FormRequestを使ったバリデーション時だけ、このJSONを配列にデコードしてから配列内の値をチェックしたいです。
バリデーション時以外はJSONの状態を維持したいです。
バリデーション時だけ入力値を変換(この場合はJSON→配列に)する方法はありますでしょうか。
もしくはJSONを変換しなくても中身に対してバリデーション適用する方法はありますか?
ご助言いただければ幸いです。
発生している問題・エラーメッセージ
all()でJSONを配列に変換している為、
バリデーション時以外も項目Aが配列になってしまいます。
all()で変換する運用をやめたいです。
該当のソースコード
現状は下記のようにJSON配列のaをall()で配列に変換してからルール適用しています。
PHP
1class SampleRequest extends FormRequest 2{ 3 public function rules() 4 { 5 return [/* validate */ 6 'other1' => ['nullable'], 7 'other2' => ['nullable'], 8 'a.*.id' => ['required','digits_between:0,9'], 9 'a.*.name' => ['required_with:a.*.id','string'], 10 'a.*.options.*.id' => ['required_with:a.*.id','digits_between:0,9'], 11 'a.*.options.*.name' => ['required_with:a.*.id','string'], 12 ] 13 } 14 public function all($keys = null) 15 { 16 $results = parent::all($keys); 17 $results['a'] =json_decode($results['a'], true); 18 return $results; 19 } 20}
これをrules適用前後のみ配列にするようにしたいです。(バリデーション時以外はJSONのまま扱いたい)
あるいはJSONの中身に対するバリデーション設定する方法、みたいなものが知りたいです。
試したこと
公式ドキュメントを確認しましたが、英語なのでよくわかりませんでした。
jsonかどうかのバリデーションはありましたが、それは求めているものと違いました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/25 01:54
2019/06/25 01:55