我有提交多维数组的表单。 像:
slide[1][title]
slide[2][title]
现在我使用Request类来定义规则。 如何遍历此类中的所有数组项。 我试过了:
public function rules()
{
return [
'id' => 'required',
'slide' => 'array|min:1',
'slide.*.title' => 'required|max:255',
'slide.*.description' => 'required|max:255',
];
}
但它不起作用。
答案 0 :(得分:8)
免责声明:此解决方案已在Alexej的问题中发布。由于答案不应该在问题正文中分享,并且OP似乎不活跃,我会将其答案作为社区维基重新发布给未来的读者:
我通过获取幻灯片数组并通过它来找到解决方案。
public function rules()
{
$rules = [
'id' => 'required',
'slide' => 'array|min:1',
];
foreach($this->request->get('slide') as $key => $val){
$rules['slide.'.$key.'.title'] = 'required|max:255';
$rules['slide.'.$key.'.description'] = 'required|max:255';
}
return $rules;
}
答案 1 :(得分:1)
现在有一种更好的方法。我不确定确切的最低版本的Laravel是否支持此功能,但我正在运行5.5,并且此方法有效。
假设您有以下请求数据:
index:0
is_required:1
type:select
name:favorite color
title:What is your favorite color?
meta[0][key]:subtitle
meta[0][value]:If you have multiple favorites, pick your favorite-favorite.
meta[1][key]:default_value
meta[1][value]:Pink
options[0][index]:0
options[0][value]:Red
options[1][index]:3
options[1][value]:Pink
options[2][index]:1
options[2][value]:Blue
options[3][index]:2
options[3][value]:Green
您的验证规则如下:
return [
'index' => 'required|integer|min:0',
'is_required' => 'required|boolean',
'type' => [
'required',
Rule::in($this->types_enum)
],
'name' => 'required|string|max:64',
'meta' => 'sometimes|array',
'meta.*.key' => 'required|string|max:64',
'meta.*.value' => 'required|string',
'options' => 'sometimes|array',
'options.*.index' => 'required|integer|min:0',
'options.*.value' => 'required|string',
];
请注意,技巧只是使用带点符号的通配符(*
)来表示数组项本身的索引值。
答案 2 :(得分:0)
多维数组没有预先配置的验证规则。最简单的方法是在控制器内进行数组验证。
问题是当你使用多维数组存储单个值时,逻辑是错误的,你应该修复的是你的逻辑,而不是框架。
例如,我看到很多时间发送用户凭据,如$ var ['login'] ['pass']和$ var ['login'] ['username'],它可以轻松转换为2不同的变量,这将更有意义。
如果您知道这些值应该是什么,并且您确信验证可能是所有不同值的通用验证,您可以创建自定义验证器(读取laravel版本的验证文档)。
参考你的代码我认为多维数组的声明方式与你的html slide[]['title']
相同。知道如何将这些参数发送到后端是有益的,然后能够为您提供有关如何设置验证的线索。