ララヴェルでオブジェクトの連想配列を検証しようとしています。私は、コントローラに渡すオブジェクトのラベリング配列の検証
有効な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の提案に従い、異なるサンプルデータを使用した後、私は今、私はid
、artnr
などのプロパティを渡す際にバリが機能することが分かったので、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'
)
)
);
、プロパティはオブジェクトに解析されるため、エラーがスローされません!
バリデータルールでオブジェクトに異なる種類の表記法を使用する可能性はありますか?
オブジェクトを検証することはできないはずですが、私はすべてのオブジェクトを連想配列に変換すると思います。
無効と思われるサンプルデータを含めることができますか? –
有効なjsonがあることを確認しましたか? – C2486
jsonを取得して配列に変換するだけで、サンプル配列でテストするだけで、動作すると思います。変換コードを確認する必要があります – C2486