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

时间:2015-09-30 14:35:55

标签: php laravel 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);
    }

4 个答案:

答案 0 :(得分:3)

我猜你的问题与我解释的有关,所以这就是我的意思 -

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

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

答案 1 :(得分:1)

而是试试这个:

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

public function postEstimate(Request $request) {


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

或尝试使用'amount' => 'required

进行验证

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

答案 2 :(得分:1)

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

首先打开以下文件

/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'
        ]);

答案 3 :(得分:0)

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

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

检查doc

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

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