如何在 CakePHP 中使用 Bitwise 将复选框标记为已选中?

How to mark checkbox as selected using Bitwise in CakePHP?

我正在使用 CakePHP 2.6 开发一个应用程序,我有一个表单,用户可以在其中设置一系列标志来创建日历事件。

我已设法设置 'add' 操作来显示标志,并在验证后在控制器中循环并将值保存到我的 table 中。这个过程是使用按位完成的。下面的代码示例:

'add' 动作视图:

echo $this->Form->input('flag', array('label' => false, 'type' => 'select', 'multiple' => 'checkbox', 'options' => $flagtypes, 'hiddenField' => false));

'add'动作控制器:

$flags = 0;
foreach ($data['flag'] as $r) {
    $flags |= (int)$r;
}

但是,当标记显示时,我无法在编辑操作视图中将标记的复选框标记为已选中。

'edit' 动作视图:

$selected = array($results[0]['BitwiseFlag']);
echo $this->Form->input('flag', array('label' => false, 'type' => 'select', 'multiple' => 'checkbox', 'options' => $flagtypes, 'hiddenField' => false, 'selected' => $selected));

$results[0]['BitwiseFlag'] = 32 在 table.

$flagtypes 数组:

array(2) { [32]=> string(4) "Test" [64]=> string(9) "Testing 2" }

将您的输入行更改为:

$selected = array($results[0]['BitwiseFlag']);

// Change 'checked' to 'selected'.
echo $this->Form->input('flag', array('label' => false, 'type' => 'select', 'multiple' => 'checkbox', 'options' => $flagtypes, 'hiddenField' => false, 'selected' => $selected));

不完全确定您的表单数据结构是什么样的,但是您应该能够从您的控制器中设置标志。在$this->request->data中设置相关值,像这样:-

$this->request->data[$this->{$this->modelClass}->alias]['flag'] = [
    0 => true,
    1 => false,
    2 => true
];

然后当您使用 $this->Form->input('flag', [...]) 时,它应该为您检查正确的标志。