Formation PUB030 : Laravel, 2019 Le formulaire d'ajout

28.7 Traiter les cases à cocher


Le traitement de formulaires avec cases à cocher est particulier.

Voici les figures de cas possibles :

  • Si la case est cochée et qu'elle contient un attribut value, l'objet $request contiendra un élément pour cette case à cocher et il aura la valeur correspondant au value.
  • Si elle est cochée et qu'elle n'a pas d'attribut value, la valeur "on" sera passée dans l'objet $request.
  • Si la case n'est pas cochée, il n'y aura pas d'élément pour cette case dans $request, comme si elle n'avait pas fait partie du formulaire.

Si vous ne prenez pas de précautions particulières et que le champ ne peut pas recevoir la valeur null dans la table, une case non cochée générera un message d'erreur du genre « SQLSTATE[HY000]: General error: 1364 Field 'actif' doesn't have a default value ».

General error: 1364 Field 'pretpourlocation' doesn't have a default value

Pour bien gérer cette technicalité, il est possible de donner la valeur true au champ lorsque la case à cocher fait partie de $request. Sinon, le champ aura la valeur false.

Contrôleur Laravel (PHP)

public function store(Request $request) : RedirectResponse

{

    try {

        $produit = new Produit($request->all());

        $produit->actif = $request->actif ? true : false;

        $produit->save();

    catch (\Throwable $e) {
        \Log::error('Erreur inattendue : ', [$e]);

        ...  // il faudra avertir l'usager

    }

}

Dans cet extrait de code, $request->actif sera à true si les deux conditions suivantes sont remplies : il doit exister et il doit avoir une valeur différente de 0. Donc, si le champ ne fait pas partie de $request, $produit->actif prendra la valeur false.

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre