Laravel表单验证 - 数组

时间:2016-02-01 19:36:36

标签: php laravel

我需要使用Request rules()方法验证一些输入。

这是我的观点(另外+8个字段):

{!! Form::open(['method'=>'POST','route' => ['method.store']]) !!}

@for($add = 0; $add < $number; $add++ )
    {!! Form::text('first_name[]') !!}
@endfor

@include('part.error')
{!! Form::submit('Add') !!}
{!! Form::close() !!}

用户可以选择添加的数量(最多10个)。 for循环包括部分但我确实重写它只包括这一个字段只是为了可读性。

这是我的dd($ this-&gt; first_name);输出:

array:3 [▼
  0 => ""
  1 => ""
  2 => ""
]

这是我在我的请求中到目前为止所得到的:

public function rules()
{
    for ($i = 0; $i < $this->number; $i ++)
    {
        $rules['first_name.' . $i] = 'required' 
        ...
        ...
    }
return $rules;
}

我确实尝试过:

$rules['first_name[' . $i.']'] = 'required';

到目前为止我唯一得到的是:

htmlentities() expects parameter 1 to be string, array given...

在我的部分(表单字段)中。

1 个答案:

答案 0 :(得分:0)

问题是您的字段名称。当验证失败并重定向到您的表单时,它无法判断哪个字段失败,因为它们没有唯一的名称。

将每个字段的ID添加到字段的名称中,如下所示:

@for($add = 0; $add < $number; $add++ )
    {!! Form::text("first_name[$add]") !!}
@endfor

此外,如果您希望在验证失败后自动用旧条目填充字段,请将空值作为文本字段的默认文本传递,如下所示:

{!! Form::text("first_name[$add]", null) !!}

这应该可以解决问题。