如何验证Laravel 5.1中的输入数组字段


How to validate an Input Array field in Laravel 5.1?

如何为输入字段编写规则,如下所示:

{!! Form::number("amount[]",null,['min' => 0, 'class' => 'form-control col-xs-2 ']) !!}

我尝试了以下错误:htmlentities() expects parameter 1 to be string, array given

        $rules = array(
            'amount[]' => 'required'
        );
        $this->validate($request, $rules);

更新:

我按照一位用户的建议尝试了这个,它不会再次在页面上重定向它。以下是控制器方法:

public function postEstimate(Request $request) {
        $rules = array(
            'amount' => 'required|array'
        );
        $this->validate($request, $rules);
    }

我想你对我所解释的有问题,所以这就是我的意思-

$rules = [];
$count_amounts = count($request->input('amount'));
foreach (range(0, $count_amounts) as $number) {
    $rules['amount.' . $number] = 'required|integer|min:0';
}

这应该检查您的每个amount输入都是一个整数,并且大于0(就像您在html验证中定义的那样(

请尝试以下操作:

private  $rules = array(
            'amount' => 'required|array',
        );
public function postEstimate(Request $request) {

        $this->validate($request, $this->rules);
    }

或者,尝试使用'amount' => 'required 进行验证

我不确定这个'amount' => 'required|array

用于自定义规则实现数组的整数值检查

首先打开以下文件

/resources/lang/en/validation.php

然后添加自定义消息

'numericarray'         => 'The :attribute must be numeric array value.',
'requiredarray'        => 'The :attribute must required all element.',

再次打开另一个文件

/app/Providers/AppServiceProvider.php

现在在引导函数中添加自定义验证代码。

public function boot()
{
    $this->app['validator']->extend('numericarray', function ($attribute, $value, $parameters)
    {
        foreach ($value as $v) {
            if (!is_int($v)) {
                return false;
            }
        }
        return true;
    });
   $this->app['validator']->extend('requiredarray', function ($attribute, $value, $parameters)
    {
        foreach ($value as $v) {
            if(empty($v)){
                return false;
            }
        }
        return true;
    });
}

现在,您可以使用requiredarray用于数组所需的所有元素。同时使用数字数组对数组进行整数值检查

$this->validate($request, [
            'field_name1' => 'requiredarray',
            'field_name2' => 'numericarray'
        ]);

如果您希望amount是一个数组,那么规则应该是

$rules = array(
    'amount' => 'required|array'
);

检查文档

如果你没有重定向或得到一个验证错误意味着没有验证错误

控制器中只有dd($request->input('amount')),并检查它是否为array。如果它是一个数组,则验证将通过。