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

    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

    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

    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

    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
    Membre à l'essai
    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

    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
    Membre à l'essai
    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