我有5选择题下拉列表的形式。 提交时,我试图运行一些验证,以确认至少一个项目已被选中。
在我的控制器中的代码;
$input = Request::except('postcode_id'); //all user input from the form
$validator = \Validator::make(
[
$input => 'required'
]
);
if ($validator->fails())
{
print "failed";
}else{
print "passed";
}
我得到的错误是; Illegal offset type
。 我想我可能需要做一个自定义的验证,但想先检查,以防有更简单的方法。
的第一个参数Validator::make()
是数据,并且第二个是验证规则,其通过所述输入名称索引的数组。 您可以使用required_without_all
验证至少有一个必须存在,但它是一个有点冗长:
$validator = \Validator::make($input, [
'dropdown_1' => 'required_without_all:dropdown_2,dropdown_3,dropdown_4,dropdown_5'
'dropdown_2' => 'required_without_all:dropdown_1,dropdown_3,dropdown_4,dropdown_5'
'dropdown_3' => 'required_without_all:dropdown_1,dropdown_2,dropdown_4,dropdown_5'
'dropdown_4' => 'required_without_all:dropdown_1,dropdown_2,dropdown_4,dropdown_5'
'dropdown_5' => 'required_without_all:dropdown_1,dropdown_2,dropdown_3,dropdown_4'
]);
或者写一些代码来生成$rules
阵列:
$fields = ['dropdown_1', 'dropdown_2', 'dropdown_3', 'dropdown_4', 'dropdown_5'];
$rules = [];
foreach ($fields as $i => $field) {
$rules[$field] = 'required_without_all:' . implode(',', array_except($fields, $i));
}
$validator = \Validator::make($input, $rules);
您需要在您的验证,不变量来使用字符串。 试试这个。
$validator = \Validator::make(
[
'input' => 'required'
]
);
自定义的验证本身并不太难。 我使用它所有阵列输入验证的时间。 在Laravel 5请求,我会做这样的事情
public function __construct() {
Validator::extend("pcc", function($attribute, $value, $parameters) {
$rules = [
'container_id' => 'exists:containers,id'
];
foreach ($value as $containerId) {
$data = [
'container_id' => $containerId
];
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
return false;
}
}
return true;
});
}
public function rules() {
return [
'containers' => 'required|pcc',
];
}