我有一个复选框数组,其中包含一个隐藏的复选框,因此如果未选中复选框,我可以发送值0.
@foreach($records as $record)
<tr>
<td>{{ $record->name }}</td>
<td>{{ $record->id }}</td>
<td>
<input type="hidden" name="record_checkbox[{{ $loop->index }}]" value="0" />
<input type="checkbox" class="form-control name="record_checkbox[{{ $loop->index }}]" value="1" />
</td>
</tr>
@endforeach
我想验证用户提交表单时发送仅 0
或1
。
在我的控制器中,我尝试过使用它:
$this->validate($request, [
'record_checkbox[]' => 'integer|boolean|min:0|max:1',
]);
但是当我使用浏览器开发人员工具并手动将checkbox
的值字段更新为100
时,它仍会接受它并将其存储在数据库中。
那么我怎样才能通过适当的验证才允许0
或1
?
答案 0 :(得分:1)
如果要验证所有数组输入,请删除括号:
$this->validate($request, [
'record_checkbox' => 'in:0,1',
]);
修改
创建自定义规则:在app/Providers/AppServiceProvider.php
方法下的boot
内添加以下内容:
use Illuminate\Support\Facades\Validator;
...
public function boot() {
Validator::extend('validate_checkboxes', function ($attribute, $values, $parameters, $validator) {
foreach( $values as $value ) {
if (!in_array($value, [0, 1])) {
return false;
}
return true;
}
});
}
然后在你的控制器中:
$this->validate($request, [
'record_checkbox' => 'validate_checkboxes',
]);
答案 1 :(得分:0)
试试吧:
use Illuminate\Validation\Rule;
$request->validate([
'record_checkbox[]' => [
'required|in_array:[0, 1]'
]
]);
答案 2 :(得分:0)
我一直试图找到一个好的答案大约一个月,我想我终于得到了一个很好的解决方案,所以我会分享它。我有类似的东西,我有3或4个复选框字段,确定我的数据库中的微小int开关。我这样做的方法是在app / Providers / AppServiceProvider.php中添加这一行:
Validator::extendImplicit('checkbox', function($attribute, $value, $parameters, $validator)
{
$data = $validator->getData();
$data[$attribute] = ($value == "1" || strtolower($value) == "true" || strtolower($value) == "on")? "1": "0";
$validator->setData($data);
return true;
});
说明:
Validator::extendImplicit
这确保无论该属性是否在请求对象中(如果未选中该 ),它仍会运行此规则。
$data = $validator->getData();
$data[$attribute] = ($value == "1" || strtolower($value) == "true" || strtolower($value) == "on")? "1": "0";
$validator->setData($data);
一旦我们进入这个函数,我们将得到数据数组,并将复选框的条目添加为0或1(注意我没有更改请求对象,尽管你也可以这样做request-&gt; merge()或request() - &gt; add()),然后设置新的数据数组。所以在你的控制器中你只需:
$data = $request->validate(['record_checkbox' => 'checkbox']);
您的数据数组将包含字段&#39; record_checkbox&#39;设置为0或1.现在可以使用此数组填充()模型。
希望这有帮助!