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

Php 如何验证Laravel 5.1中的输入数组字段?,php,laravel,laravel-5.1,Php,Laravel,Laravel 5.1,如何为输入字段编写规则,如下所示: {!! Form::number("amount[]",null,['min' => 0, 'class' => 'form-control col-xs-2 ']) !!} 我尝试了以下操作,但出现了错误:htmlentities()希望参数1是字符串,数组是给定的 $rules = array( 'amount[]' => 'required' ); $this-&

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

{!! Form::number("amount[]",null,['min' => 0, 'class' => 'form-control col-xs-2 ']) !!}
我尝试了以下操作,但出现了错误:
htmlentities()希望参数1是字符串,数组是给定的

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

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

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

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

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

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

如果您没有重定向或收到验证错误,则表示没有验证错误


只需在控制器中检查其a
array
是否为数组,验证就会通过。

如果您希望将
amount
作为数组,则规则应该是

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

如果您没有重定向或收到验证错误,则表示没有验证错误

只需在控制器中添加
dd($request->input('amount'))
,并检查其是否为
数组,如果是数组,则验证将通过。

请尝试以下操作:

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

public function postEstimate(Request $request) {


        $this->validate($request, $this->rules);
    }
或者,尝试使用所需的
'amount'=>'进行验证

我不确定是否需要此
'amount'=>'required | array

请尝试以下方法:

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

public function postEstimate(Request $request) {


        $this->validate($request, $this->rules);
    }
或者,尝试使用所需的
'amount'=>'进行验证


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

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

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

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

我想您对我解释的内容有疑问,这就是我的意思-

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

这应该检查您输入的每个
金额是否都是一个整数,并且大于
0
(如您在html验证中定义的)

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

首先打开以下文件

/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。还可以使用numericarray检查数组的整型值

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

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

首先打开以下文件

/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。还可以使用numericarray检查数组的整型值

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

你得到这个错误是因为它考虑了<代码>金额[]/Case>作为数组,你不能调用字段<代码>金额< /代码>?@ GAL,如果你的意思是<代码>规则<代码>,那么是的,我已经把它设置为<代码>金额<代码>,但它根本就没有抓住它。我的意思是,形式和规则,如果您不想更改,可以将其称为
amount.0
内部规则(如果这是您的第一个金额[]),但我不明白您为什么要这样做。@Gal字段是动态的,不是预定义的。我明白了,这可能会帮到你-这与你不需要
valueKey
完全不同,你需要做的只是迭代一次,为你的
amount
数组构建规则数组。如果没有删除动态字段的选项,则可以使用<代码> Reals函数从0到数组长度。你不能调用字段
amount
?@Gal如果你的意思是在
规则中
那么是的,我已经将它设置为
amount
,但它一点也没有捕捉到。我的意思是表单和规则,如果你不想更改,你可以将其称为
amount.0
内部规则(如果这是你的第一个金额[])但是我不明白你为什么要这样做。@Gal字段是动态的,不是预定义的。我明白了,这可能会帮助你-这与你不需要
valueKey
完全不同。你需要做的只是迭代一次,为你的
amount
数组构建规则数组。如果您没有删除动态字段的选项,则可以使用从0到数组长度的
range
函数。它根本不验证它。规则
required | array
从5.3起仍然不起作用。它根本不验证它。规则
required | array
从5.3起仍然不起作用。使用
amount
只是它根本不检测字段<代码>数组
规则在Laravel 5.1中引入,使用
数量
只是它根本不检测字段<代码>数组
规则在Laravel 5.1中引入