Bonjour
Je voudrai savoir comment pouvoir faire un checkbox avec plus de 2 choix à l'aide de cakephp

4 réponses


j'ai eu a traiter ça pour enregistrer des animaux de ma table Users,
je stock les choix dans un seul champs, séparés par des points virgules :

dans le UsersTable :

    public function beforeMarshal($event, $entity, $options) {
        if(isset($entity['animal'])){
            $entity['animal'] = implode(";", $entity['animal']);
        }
    }

dans la vue du formulaire :

        $user->animal = explode(';',$user->animal);
        echo $this->Form->label('animal',['Animaux domestiques']);
        echo '<div class="checkbox">' . 
        $this->Form->input('animal',
          ['options'  => ['chat'=>'chat','chien'=>'chien','poissons'=>'poissons'],
          'multiple' => 'checkbox',
          'label'=>false
          ]) 
        . '</div>';

Bonsoir, tout d'abord je tiens à vous remercier énormement.
j'ai pas bien compris, par "je stock les choix dans un seul champs, séparés par des points virgules ", comment les stocker svp
et pour le premier script, est ce que je le met au niveau du controlleur.Désolé mais je viens de débuter en cakephp ??
Merci à l'avance.

Dans ma base de données j'ai ma table "Users", et dedans un champs "animal".
Dans la view, sur le formulaire, il y a les checkbox avec plusieurs choix : "chiens", "chats", "poissons"...etc
l'utilisateur coche une ou plusieurs case
Quand il valide le formulaire, il y a des processus dans le framework qui se déclenchent (beforemarshal, beforesave, aftersave..etc) ce sont des fonctions disponibles dans la class Table, dans mon exemple c'est dans UsersTable
J'utilise la fonction beforeMarshal qui permet de "retraiter" les données avant toutes autres manipulations

public function beforeMarshal($event, $entity, $options) {
        if(isset($entity['animal'])){
            $entity['animal'] = implode(";", $entity['animal']);
        }
    }

Donc ce bout de code récupère les valeurs de mes checkboxs "animal", et les fusionnes en les séparant par des points virgules.
mon $entity['animal'] prend la valeur : 'chien;chat' si l'utilisateur a coché ça.

le deuxième bout de code c'est pour générer le formulaire :

$user->animal = explode(';',$user->animal);
        echo $this->Form->label('animal',['Animaux domestiques']);
        echo '<div class="checkbox">' . 
        $this->Form->input('animal',
          ['options'  => ['chat'=>'chat','chien'=>'chien','poissons'=>'poissons'],
          'multiple' => 'checkbox',
          'label'=>false
          ]) 
        . '</div>';

la première ligne récupère le $user->animal déjà existant (c'est un formulaire de modification), et fait le processus inverse, il sépare les champs en fonction des points virgules pour me retourner un tableau des valeurs déjà cochées.
$user->animal prend la valeur ['chien','chat'] si l'utilisateur avait déjà coché ça.
Je n'ai plus qu'a générer les checkboxs avec le code d'après.

Merci pour votre aide,
Une fois avoir recopié le premier script au niveau du controlleur, et le deuxieme au niveau de la vue, ca me donne une erreur en me disant que $user n'est pas declarée, je tiens à préciser que j'ai le cakephp 2.5