私はLaravel 5.4でバリデーターでリクエストを検証しています。ドキュメントを参照してください: https://laravel.com/docs/5.4/validation#validating-arrays
基本的には、コントローラーの次のコードです。
public function createSomeResource(Request $request)
{
$this->validate($request, [
'items' => 'required',
];
...
}
私はフィールド「items」の存在を要求しますが、このコードはそれを行いますが、問題は「items」フィールドが空の配列である場合に検証が失敗することです。
{
"fields": []
}
、これは望ましくない動作です。これが「必須」パラメータの文書化された動作であることは知っていますが、「クリーン」な回避策は見当たりません。私も試しました:
public function createSomeResource(Request $request)
{
$this->validate($request, [
'items' => 'required_unless:items,[]',
];
...
}
しかし、ドキュメントでは「required_unless」句の後の別のフィールドで機能すると書かれているため、同様に失敗しますが、完全にはわかりません。
空の配列を禁止せずに、フィールド「アイテム」の存在を要求する方法を提案してもらえますか?
編集:私の頭に浮かんだもう1つの「明白な」アプローチは、「present | array」ルールを使用することであり、ほとんど私が望むことを行いますが、残念ながら空の文字列も検証ルールを通過します。 Laravel、そうではないかもしれません-私はLaravel= githubリポジトリで問題を開きました: https://github.com/laravel/framework/issues/18948
これを試して:
public function createSomeResource(Request $request)
{
$this->validate($request, [
'items' => 'present|array',
];
...
}
試してください:
public function createSomeResource(Request $request)
{
$this->validate($request, [
'items' => 'required|array|min:1',
];
...
}
From Laravel doc:
min:value検証中のフィールドには最小値が必要です。文字列、数値、配列、およびファイルは、サイズ規則と同じ方法で評価されます。
ここでバディに行きます...
public function createSomeResource(Request $request)
{
$validate_us_pls = [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
if( !empty($request->get('items')) ){
$validate_us_pls['items'] = 'required';
}
$this->validate($request, $validate_us_pls);
}
おそらくこれは動作するはずです
public function rules()
{
return [
"items" => "required|array|min:0",
"items.*" => "required|string|distinct|min:0",
];
}
たぶんこれは便利でしょうか?
配列のサイズはcountを使用します
'ids'=>'present|array|size:1'
またはこれ
'users' => 'required|array|between:2,4'