J'ai un formulaire avec une case à cocher

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

Comment puis-je transmettre la valeur 0 lorsque la case n'est pas cochée?

Mon contrôleur:

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

    foreach($account as $acc => $val) {
        dd($val); //how get 0?
    }
}
2
Dumitru 23 mai 2018 à 16:19

5 réponses

Meilleure réponse

Les cases à cocher ne sont affichées que lorsqu'elles sont cochées, vous pouvez donc utiliser ce fragment dans le contrôleur

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


    $myVar = isset($request->account[0]) ? 1 : 0;
}
3
Malkhazi Dartsmelidze 23 mai 2018 à 14:09
@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

Dans le contrôleur

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
}
}

Si coché sur la case à cocher, il obtient la valeur = 1 si non coché sur la case à cocher obtient la valeur = 0

2
Nirav Bhoi 2 févr. 2019 à 11:17

Essaye ça:

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

Et utilisez-le comme:

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

Ou

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

En fonction des valeurs que vous devez stocker. Vous n'avez pas besoin de valider, il vous suffit de vérifier si le paramètre est reçu.

J'ai dû faire face au même problème, et j'ai essayé de nombreuses méthodes et j'ai trouvé celle-ci la plus élégante.

0
Amir Rami 24 mars 2020 à 12:30

En utilisant Laravel Collective,

@foreach($accounts as $acc)

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

@endforeach
0
Anand Mainali 22 janv. 2020 à 08:53

Ajoutez simplement un champ de saisie caché.

<input type="hidden"  name="account[{{$acc->id }}]" value="0" >
-1
Lakhwinder singh 10 sept. 2019 à 11:51