web-dev-qa-db-fra.com

cakephp: Comment configurer la case à cocher pour cocher?

J'utilise 

$form->input('Model.name', array('multiple'=>'checkbox');

J'essaie de me baser sur les données du modèle pour définir certaines cases à cocher sur cochées.

Comment puis je faire ça? 

26
Dave

la solution de cmptrgeekken fonctionne pour une seule case à cocher. Je suppose que vous générez plusieurs cases à cocher, pour une relation HABTM ou quelque chose de similaire.

Vous devez passer un tableau avec les valeurs des éléments qui vont être sélectionnés pour la méthode, comme ceci:

$options = array(1 => 'ONE', 'TWO', 'THREE');
$selected = array(1, 3);
echo $form->input('Model.name', array('multiple' => 'checkbox', 'options' => $options, 'selected' => $selected));

va générer ceci:

 <div class="input select">
      <label for="ModelName">Name</label>
      <input name="data[Model][name]" value="" type="hidden">

      <div class="checkbox">
           <input name="data[Model][name][]" checked="checked" value="1" id="ModelName1" type="checkbox">
           <label for="ModelName1" class="selected">ONE</label>
      </div>
      <div class="checkbox">
           <input name="data[Model][name][]" value="2" id="ModelName2" type="checkbox">
           <label for="ModelName2">TWO</label>
      </div>
      <div class="checkbox">
           <input name="data[Model][name][]" checked="checked" value="3" id="ModelName3" type="checkbox">
           <label for="ModelName3" class="selected">THREE</label>
      </div>
 </div>

Les première et troisième cases à cocher sont cochées.

Rappelez-vous simplement que vous travaillez en fait avec un élément de sélection multiple qui est simplement affiché sous forme de tas de cases à cocher (ce qui est préférable pour OMI en raison de sa facilité d'utilisation).

30
Marko

Je n'utilise pas CakePHP, mais selon la documentation, il semble que vous devriez pouvoir ajouter l'option 'checked'=>true:

$form->input('Model.name', array('type'=>'checkbox','checked'=>true));

puisque c'est l'une des options de la case à cocher fonction.

23
cmptrgeekken
 $ options = array (1 => 'ONE', 'TWO', 'THREE'); 
 $ selected = array (1, 3); 
 echo $ form-> input ('Model. name ', 
 array (
 "name" => $ mnus [' Aco '] [' id '], 
 "type" => "select", 
 "multiple" => " case à cocher ", 
 'options' => $ options, 
 'sélectionné' => $ sélectionné) 
);

c'est la bonne façon de cocher plusieurs cases et de cocher l'option. J'utilise ceci dans cake1.3 s'il vous plaît revérifier une fois sur votre code, il doit fonctionner. 

2
Gaurav
echo $this->Form->input('Title', array('type'=>'checkbox', 'label'=>'Label', 'checked'=>'checked'));
2
Aaron

La solution Marko fonctionne toujours dans CakePHP 2.0+

-> https://stackoverflow.com/a/1962499/3197383

Il suffit de corriger avec la nouvelle syntaxe:

<?php
$options = array(1 => 'ONE', 'TWO', 'THREE');
$selected = array(1, 3);
echo $this->Form->input('ModelName', 
    array('multiple' => 'checkbox', 'options' => $options, 'selected' => $selected)
);
?>
1
Rémi Becheras

Une autre façon d'avoir une case à cocher avec le "label" juste à côté est. 

$form->checkbox('Model.name', array('checked'=>'checked'))?> Label 

L'étiquette peut être ce que vous voulez quand même. exemple: 21 000-3 000, Tyre, Humain. Je suis sûr que vous avez l’idée.

0
Stirling
<?php  

$subjects = array(1=>'Snow boarding',2=>'Surfing',3=>'Trekking',4=>'Swimming');
$selected_skills = array(0=>2,1=>4);

// For MutiSelect box with selected 
 $form->input('skills_list',array('label' => 'Skills','options' => $subjects,'class' =>'','multiple'=>true,'selected'=> $selected_skills));

//For Multiple checkbox with checked 
$form->input('skills_list',array('label' => 'Skills','options' => $subjects,'class' =>'','multiple'=>'checkbox','selected'=> $selected_skills));
?>
0
user314430
'likes_preferences' =>array(
    'type'=>'select','label' => 'Main likes/preferences',
    'options' => $this->Ethos->toOptionsArray('preferences'),
    'multiple' => 'checkbox', 
    'div'=>array('class'=>'input select checkbox-group clearfix'),
    'hiddenField' => false,
),

le code ci-dessus pour l'ajout de données, vous devez changer le champ 'likes_preferences' d'un tableau à une chaîne séparée par des virgules avant de l'enregistrer dans la base de données.

$preferences = implode(',',$this->request->data['Member']['likes_preferences']);
$this->request->data['Member']['likes_preferences'] = $preferences;

MODE ÉDITION

$likes = explode(',',$this->request->data['Member']['likes_preferences']);

'likes_preferences' =>array(
    'type'=>'select','label' => 'Main likes/preferences',
    'options' => $this->Ethos->toOptionsArray('preferences'),
    'multiple' => 'checkbox', 
    'div'=>array('class'=>'input select checkbox-group clearfix'),
    'hiddenField' => false,
    'selected' => $likes
),

vous avez terminé, encore une fois, vous devez convertir le tableau en chaîne lors de la mise à jour de la base de données dans l'action d'édition.

0
Dinker

Voici un petit extrait de code d'un de mes projets.

    $categories = $this->Site->Category->find('list', array('recursive' => -1));
    $this->set(compact('categories'));

    $this->Site->Category->bindModel(array('hasOne' => array('CategoriesSite')));
    $selected = $this->Site->Category->find('list', array(
        'fields' => array('id'),
        'conditions' => array(
            'CategoriesSite.site_id' => $this->data['Site']['id'],
        ),
        'recursive' => 0,
    ));
    $this->set(compact('selected'));

La clé principale est pour 'fields' => array('id') sélectionnée

0
Rifat
$options = array("fixed","varry");
$selected = "0";

echo $form->input('Model.name', array('multiple' => 'checkbox', 'options' => $options, 'value' => $selected));

Utilisez l'attribut value pour rendre coché par défaut.

0
Pankaj Wanjari

C'est super simple

$form->input('field_name', array('type'=>'checkbox','checked'=>true));

C'est tout. 

Documentation: https://book.cakephp.org/3.0/en/views/helpers/form.html

0
M.suleman Khan