cakephp:如何设置复选框以进行检查?

时间:2009-12-26 02:15:10

标签: cakephp

我正在使用

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

我正在尝试基于模型数据来设置要检查的特定复选框。

我该怎么做?

11 个答案:

答案 0 :(得分:30)

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>

选中第一个和第三个复选框。

请记住,您实际上正在使用多个选择元素,该元素仅显示为一组复选框(由于可用性,这是更好的IMO)。

答案 1 :(得分:23)

我不使用CakePHP,但根据文档,您似乎应该能够添加选项'checked'=>true

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

因为这是checkbox函数的选项之一。

答案 2 :(得分:2)

$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中使用它,请在您的代码上重新检查一次它必须工作。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

Marko解决方案仍在CakePHP 2.0 +中工作

- &GT; https://stackoverflow.com/a/1962499/3197383

只需要使用新语法进行更正:

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

答案 5 :(得分:0)

使用旁边的“标签”选中复选框的另一种方法是。

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

标签可以是你想要的。例如:21,000-3000,Tire,Human。我相信你明白了。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

以下是我项目中的一个小代码片段 -

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

答案 8 :(得分:0)

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

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

使用value属性进行默认选中。

答案 9 :(得分:0)

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

上面添加数据的代码,需要更改字段&#39; likes_preferences&#39;在保存到数据库之前,从数组到逗号分隔的字符串。

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

完成后,您必须在编辑操作中更新数据库时将数组转换为字符串。

答案 10 :(得分:0)

超级简单

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

就是这样。

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