web-dev-qa-db-ja.com

cakephp:チェックボックスをオンに設定する方法は?

私は使っている

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

モデルデータに基づいて特定のチェックボックスをオンに設定しようとしています。

どうやってやるの?

26
Dave

cmptrgeekkenのソリューションは、単一のチェックボックスで機能します。 HABTMリレーションまたは同様のもののために、複数のチェックボックスを生成していると仮定しています。

次のように、選択する要素の値を含む配列をメソッドに渡す必要があります。

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

これが生成されます:

 <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>

最初と3番目のチェックボックスがオンになっています。

単に、チェックボックスの束として表示される複数選択要素を実際に使用していることを思い出してください(使いやすさのためにIMOの方が優れています)。

30
Marko

私はCakePHPを使用しませんが、ドキュメントによると、オプション'checked'=>trueを追加できるはずです。

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

チェックボックス 関数のオプションの1つであるため。

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 "=>" checkbox "、
 'options' => $ options、
 'selected' => $ selected)
);

これは、複数のチェックボックスとチェックオプションの正しい方法です。これをcake1.3で使用していますが、動作するコードでもう一度確認してください。

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

CakePHP 2.0+でまだ動作しているMarkoソリューション

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

新しい構文で修正する必要があります:

<?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

チェックボックスをすぐ隣にある「ラベル」でチェックする別の方法があります。

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

ラベルはあなたが望むものになります。例:21,000-3000、Tyre、Human。私はあなたがそのアイデアを得ると確信しています。

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,
),

データを追加するための上記のコードでは、データベースに保存する前に、フィールド「likes_preferences」を配列からコンマ区切り文字列に変更する必要があります。

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

編集モード

$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
),

編集が完了したら、編集アクションでデータベースを更新するときに、配列を文字列に変換する必要があります。

0
Dinker

これは私のプロジェクトの1つからの小さなコードスニペットです。

_    $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'));
_

メインキーは、'fields' => array('id')が選択されています

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

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

value属性を使用して、チェックされたデフォルトを作成します。

0
Pankaj Wanjari

それは超シンプルです

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

それでおしまい。

ドキュメント: https://book.cakephp.org/3.0/en/views/helpers/form.html

0
M.suleman Khan