【问题标题】:Laravel Form Validation - arrayLaravel 表单验证 - 数组
【发布时间】:2016-02-01 19:36:36
【问题描述】:

我需要使用 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->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...

在我的部分(表单域)中。

【问题讨论】:

  • 您将数组作为第一个参数传递给 Form::text() 如错误所述。我猜你想要实现的是 Form::text('first_name' . $add)。此外,如果这是您的确切代码,请不要忘记将“form::open”中的“f”大写
  • 感谢您的回答。表单没有问题,它很好地传递给了Controller并保存到了模型中。我需要 first_name[],所以我可以存储多个输入。错误是由 rules() 方法给出的,我不知道为什么。没有验证,就没有问题。但我仍然需要以某种方式验证它。编辑:是的,我没有将其复制到帖子中。在项目中还是不错的。
  • 抱歉造成误会。这是规则的全部功能吗?如果不是,你会分享 rules() 的整个代码吗?
  • 这就是我在 rules() 方法中的全部内容。这些点替换了其他表单字段,例如“second_name”、“last_name”。像另外 8 个字段一样,与 'first_name' 数组相同。
  • 检查我的答案。我认为应该可以解决它。

标签: php laravel


【解决方案1】:

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

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

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

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

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

这应该可以解决问题。

【讨论】:

  • 哇,我真的以为这会影响我的存储方法,但事实并非如此。感谢您的解释和解决。
猜你喜欢
  • 2020-05-05
  • 2016-08-28
  • 2016-08-10
  • 2019-01-24
  • 2017-10-08
  • 2019-08-09
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
相关资源
最近更新 更多