2017-11-22 17 views
0

ララヴェルでオブジェクトの連想配列を検証しようとしています。私は、コントローラに渡すオブジェクトのラベリング配列の検証

有効なJSON文字列は次のようになります。私はstore機能で指定したものの

public function store(Request $request) 
{ 
    $request->replace(array(
     'create' => json_decode($request->create), 
     'update' => json_decode($request->update) 
    )); 

    $validator = Validator::make($request->all(), [ 
     'create' => 'required|array', 
     'create.*.artnr' => 'required|max:20', 
     'create.*.unit' => 'max:20', 
     'update' => 'required|array', 
     'update.*.id' => 'required|exists:products,id', 
     'update.*.artnr' => 'required|max:20', 
     'update.*.unit' => 'max:20' 
    ])->validate(); 
} 

{ 
    'create': [ 
     { 
      'artnr': '123456', 
      'unit': 'Stk.' 
     }, 
     { 
      'artnr': '23456', 
      'unit': 'Kg.' 
     } 
    ], 
    'update': [ 
     { 
      'id': 1 
      'artnr': '567890', 
      'unit': 'Stk.' 
     }, 
     { 
      'id': 2 
      'artnr': '67836', 
      'unit': 'Kg.' 
     } 
    ] 
} 

データを検証し、コントローラ機能は、次のようになりますすべてのオブジェクトに対してartnrが存在している必要があります。コントローラは、artnrなしでオブジェクトを渡すとエラーをスローしません。

私が間違っていることは何ですか?


編集

オーケーuser2486の提案に従い、異なるサンプルデータを使用した後、私は今、私はidartnrなどのプロパティを渡す際にバリが機能することが分かったので、unit連想配列として。このように:私はしかし、私のJSON文字列をデコードするとき

$arr = array(
    'create' => array(
     array(
      'artnr' => '123456', 
      'unit' => 'Kg' 
     ), array(
      'unit' => 'Stk.' 
     ) 
    ), 'update' => array(
     array(
      'id' => 1, 
      'unit' => 'Stk.' 
     ), array(
      'id' => 2, 
      'artnr' => '123456', 
      'unit' => 'Kg' 
     ) 
    ) 
); 

、プロパティはオブジェクトに解析されるため、エラーがスローされません!

バリデータルールでオブジェクトに異なる種類の表記法を使用する可能性はありますか?

オブジェクトを検証することはできないはずですが、私はすべてのオブジェクトを連想配列に変換すると思います。

+0

無効と思われるサンプルデータを含めることができますか? –

+0

有効なjsonがあることを確認しましたか? – C2486

+0

jsonを取得して配列に変換するだけで、サンプル配列でテストするだけで、動作すると思います。変換コードを確認する必要があります – C2486

答えて

0

これは私のjson_decodeのような機能を呼び出すことでした。 json_decode($request->create, true)です。 2番目のパラメータをtrueに設定すると、この関数はすべてのJSONオブジェクトを連想配列に変換します。

関連する問題