如何在laravel 5中添加复选框验证?

时间:2018-01-08 15:39:35

标签: laravel validation laravel-5

我有一个复选框数组,其中包含一个隐藏的复选框,因此如果未选中复选框,我可以发送值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

我想验证用户提交表单时发送 01

在我的控制器中,我尝试过使用它:

$this->validate($request, [
    'record_checkbox[]' => 'integer|boolean|min:0|max:1',
]);

但是当我使用浏览器开发人员工具并手动将checkbox的值字段更新为100时,它仍会接受它并将其存储在数据库中。

那么我怎样才能通过适当的验证才允许01

3 个答案:

答案 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.现在可以使用此数组填充()模型。

希望这有帮助!