如果未选中则如何传递复选框值0,如果使用数组laravel检查则传递1

时间:2018-05-23 13:19:52

标签: php laravel

我的表格带有复选框

   @foreach($accounts as $acc)
         <input type="checkbox" value="1" name="account[{{ $acc->id }}]" @if($acc->published) checked @endif>
   @endforeach

如果未选中复选框,我如何传递0值?

我的控制器:

public function updateMon(Request $request) {
    $request->validate([
        'account' => 'required|array',
        'account.*' => 'integer'
    ]);

    foreach($account as $acc => $val) {
        dd($val); //how get 0?
    }
}

5 个答案:

答案 0 :(得分:0)

复选框仅在选中时发布,因此在控制器中您可以使用此片段

public function updateMon(Request $request) {
    $request->validate([
        'account' => 'required|array',
        'account.*' => 'integer'
    ]);


    $myVar = isset($request->account[0]) ? 1 : 0;
}

答案 1 :(得分:0)

@foreach($accounts as $acc)
         <input type="hidden" value="0" name="account[{{ $acc->id }}]">
         <input type="checkbox" value="1" name="account[{{ $acc->id }}]" @if($acc->published) checked @endif>
@endforeach

在控制器中

public function updateMon(Request $request) {
$request->validate([
    'account' => 'required|array',
    'account.*' => 'boolean'
]);

foreach($account as $acc => $val) {
    dd($val); //that returns 0 if not checked
}
}

如果上选中复选框比它得到值= 1 如果未选中复选框,则值为= 0

答案 2 :(得分:0)

使用Laravel Collective,

@foreach($accounts as $acc)

{{ Form::hidden('account['. $acc->id .']', false) }}
{{ Form::checkbox('display['.$acc->id.']', true,$acc->published ? true : false) }}

@endforeach

答案 3 :(得分:0)

尝试一下:

Request::macro('checkbox', function ($key, $checked = 1, $notChecked = 0) {
     return $this->input($key) ? $checked : $notChecked;
});

并像这样使用它:

$model->property = $request->checkbox('input_name');

$model->property = $request->checkbox('input_name', 'yes', 'no');

取决于您需要存储的值。您不需要进行验证,只需要检查是否已接收到参数即可。

我不得不处理相同的问题,并且我尝试了许多方法,但我发现这是最优雅的方法。

答案 4 :(得分:-2)

只需添加隐藏的输入字段即可。

<input type="hidden"  name="account[{{$acc->id }}]" value="0" >