我有一个数组中包含一系列数字的表单:
<input type="number" name="items[{{ $sku }}]" min="0" />
<input type="number" name="items[{{ $sku }}]" min="0" />
<input type="number" name="items[{{ $sku }}]" min="0" />
现在我想验证那些输入字段中至少有一个具有值。
我在 OrderCreateRequest 中尝试了以下内容,但它已通过:
return [
'items' => 'required|array|min:1'
];
我错过了什么吗?
答案 0 :(得分:5)
如果您在控制器文件中使用它,那么我想它应该是
$this->validate($request, [
'items' => 'required|min:1'
]);
或者这个
$validator = Validator::make($request->all(), [
"items.*" => 'required|min:1',
]);
答案 1 :(得分:4)
我认为您需要一个自定义验证规则,如下所示,因为min不适用于数组的元素。
Validator::extend('check_array', function ($attribute, $value, $parameters, $validator) {
return count(array_filter($value, function($var) use ($parameters) { return ( $var && $var >= $parameters[0]); }));
});
您可以创建ValidatorServiceProvider,并可以将这些行添加到ValidatorServiceProvider的引导方法中。然后,您需要在config / app.php中将Provider添加到providers数组中。
App\Providers\ValidatorServiceProvider::class,
或者您只需将它们添加到控制器的操作顶部。
最后,您可以在验证规则中使用它。
'items' => 'check_array:1',
注意:如果我理解正确,那就可以了。
答案 2 :(得分:4)
除Hakan SONMEZ的答案外,要检查是否设置了至少一个数组元素,可以使用Rule对象。例如,创建规则类并将其命名为ArrayAtLeastOneRequired()。
要创建新的规则类,请运行控制台命令:
No fill from ad server.
Failed to load ad: 3
然后在创建的类中使用edit方法pass():
php artisan make:rule ArrayAtLeastOneRequired
使用此规则检查数组的至少一个元素是否不为空:
public function passes($attribute, $value)
{
foreach ($value as $arrayElement) {
if (isset($arrayElement)) {
return true;
}
}
return false;
}
答案 3 :(得分:0)
您可以为数组和foreach元素设置规则。
public function rulez(Request $req) {
$v = Validator::make($req->all(), [
'items' => 'required|array|min:1',
'items.*' => 'required|integer|between:0,10'
]);
if ($v->fails())
return $v->errors()->all();
}
第一条规则说项目必须是至少包含1个元素的数组。 第二条规则说项目的每个元素必须是0到10之间的整数。
如果规则似乎不起作用,请尝试转储$ req-&gt; all()。
dump($req->all());
答案 4 :(得分:0)
可接受的答案是可以的,并且工作正常,但是如果您不想创建函数和其他内容,那么我使用的另一种解决方法是
您可以将数组的元素直接声明为items.0
并要求该输入,它不会关心其他输入,但会要求它是第一个输入,并非在所有情况下都可用,但在我很有用。
在您的OrderCreateRequest
中:
public function rules()
{
return [
"items.0" => "required",
];
}
如果您的商品不是动态商品,并且数量不多,则可以按以下方式使用required_without_all
:
public function rules()
{
return [
"items.0" => "required_without_all:items.1,items.2",
"items.1" => "required_without_all:items.0,items.2",
"items.2" => "required_without_all:items.0,items.1",
];
}
答案 5 :(得分:0)
$valid = Validator($request->all(), [
'type' => 'required|string|in:city,region,country',
]);
if ($valid->fails()) return response()->json($valid->errors(), 400);
答案 6 :(得分:0)
"size" 规则用于匹配确切的编号。数组中的项目(如果传入参数是一个数组),“最小”规则也是如此,即它计算最小数量。数组中的元素(如果传入参数是数组)
$this->validate($request, ['my_array' => 'size:6']); // array must have 6 items
$this->validate($request, ['my_array' => 'min:1']); // there must be 1 item in array
答案 7 :(得分:-1)
$this->validate($request,[
'item'=>'required|min:1'
]);
答案 8 :(得分:-1)
'items' => 'required|array', // validate that field must be from array type and at least has one value
'items.*' => 'integer' // validate that every element in that array must be from integer type
,您可以为这些元素添加任何其他验证规则,例如:'items.*' => 'integer|min:0|max:100'