IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Laravel PHP Discussion :

Gestion checkbox non cochée


Sujet :

Laravel PHP

  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 221
    Points
    20 221
    Par défaut Gestion checkbox non cochée
    Salut,
    je me forme à Laravel et j'ai un petit doute sur la façon dont je gère les checkbox.

    J'ai un formulaire simple avec 2 champs text et une checkbox qui peut être cochée ou non.

    Coté model j'ai ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Permission extends Model
    {
        protected $guarded = [];
        public $timestamps = false;
     
        public static function getValidationRule(): array {
            return [
                'label' => 'required',
                'key' => 'required|unique:permissions,key',
                'visible' => 'integer'
            ];
        }
    }
    Et dans mon controller je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function store(Request $request)
    {
        $validatedAttr = request()->validate(Permission::getValidationRule());
        if(!$request->has('visible')) {
            $validatedAttr['visible'] = 0;
        }
        Permission::create($validatedAttr);
     
        return redirect('/admin/permission/index');
    }
    Je gère donc manuellement la présence ou non de la valeur "visible" puisque si elle est décochée elle n'est pas transmise dans la requête. Sachant que la valeur par défaut dans la base est à 1.

    Y'a t'il plus académique à faire ou alors c'est la bonne façon de faire ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Bonjour,

    Dans la ligne deux il manque le $ à request

    Par contre comme visible n'est pas required dans ta validation, alors tu n'es pas obligé de traité la demande, lors de ton create, Laravel est assez intelligent pour faire un insert sans prendre en compte

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 221
    Points
    20 221
    Par défaut
    Il gère bien que l'attribut visible ne soit pas requis , donc il ne l'ajoute pas à la requête , donc c'est la valeur par défaut (SQL) qui est appliqué et du coup je me retrouve avec visible à 1 alors qu'il est pas cliqué.
    Alors que si je le force après avoir vérifier son absence tout se passe bien.

    Idem pour la mise à jour , si je force pas à 0 en cas d'absence de l'attribut , il n'est jamais mis à jour de 1 vers 0.

    La solution facile serait surement de passer par un <select>
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Je verrais alors deux pistes :

    1: changer ta validation en boolean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static function getValidationRule(): array {
            return [
                'label' => 'required',
                'key' => 'required|unique:permissions,key',
                'visible' => 'boolean'
            ];
        }
    faire ton petit code de vérification, mais le transposer dans un mutator de ton model

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ca pique les yeux.
    C'est pas du symfony

    Tu as les Class Request pour cette utilisation ou directement dans ton controller

    une class request
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    namespace App\Http\Requests;
     
    use Illuminate\Foundation\Http\FormRequest;
     
    class RequestAddress extends FormRequest
    {
        /**
         * Determine if the user is authorized to make this request.
         *
         * @return bool
         */
        public function authorize()
        {
            return true;
        }
     
        /**
         * Get the validation rules that apply to the request.
         *
         * @return array
         */
        public function rules()
        {
            return [
                'address.*' => 'required',
                'address.address_complement' => 'nullable',
            ];
        }
     
        public function messages()
        {
            return [
                '*.required' => 'Le champ est obligatoire',
            ];
        }
    }
    et dans ta méthode de controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /**
         * Store a newly created resource in storage.
         *
         * @param  \App\Http\Requests\RequestAddress  $request
         * @return \Illuminate\Http\Response
         */
        public function store(RequestAddress $request)
        {
            //
        }
    Validator direct dans ton controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    /**
         * Store a newly created resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @return \Illuminate\Http\RedirectResponse
         */
        public function store(Request $request)
        {
            $request->validate([
                'game.title' => 'required',
                'translate.*.content' => 'required',
            ], [
                '*.required' => 'Ce champs est obligatoire.'
            ]); 
        }
    Pour un CheckBox il suffit de dire que tu veux la valeur du CheckBox.

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Citation Envoyé par theWebBeginner Voir le message
    Ca pique les yeux.
    C'est pas du symfony

    Tu as les Class Request pour cette utilisation ou directement dans ton controller
    La classe request, n'a que peu d’intérêt dans son cas.
    En dehors du fait d’éventuellement de redéfinir la variable $route elle ne fais que de renvoyer un tableau de Rules, tableau qui à tout son intérêt par contre de se trouver dans le model, ce qui est explicite ici, car en plus il fait exactement ce que tu lui proposes avec le $request->validate .

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    La classe request, n'a que peu d’intérêt dans son cas.
    En dehors du fait d’éventuellement de redéfinir la variable $route elle ne fais que de renvoyer un tableau de Rules, tableau qui à tout son intérêt par contre de se trouver dans le model, ce qui est explicite ici, car en plus il fait exactement ce que tu lui proposes avec le $request->validate .
    Voici une nouveauté que je ne connais pas sur laravel.
    La définition des validators dans le model.


    Je ne saisi pas ton explication avec la variable $route ???

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [HTML 4.0] Checkbox non cochée lors de l'impression
    Par thaundeadboss dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 14/09/2010, 15h26
  2. Bouton désactivé si checkbox non cochée
    Par fredfaz dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/02/2009, 15h49
  3. Définir la valeur d'une checkbox non cochée
    Par frakosun dans le forum Langage
    Réponses: 3
    Dernier message: 06/02/2008, 13h52
  4. Valeur d'une checkbox non cochée
    Par lekunfry dans le forum Langage
    Réponses: 8
    Dernier message: 14/09/2007, 12h10
  5. Réponses: 2
    Dernier message: 24/05/2006, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo