【问题标题】:How to mark checkbox as selected using Bitwise in CakePHP?如何在 CakePHP 中使用 Bitwise 将复选框标记为选中?
【发布时间】:2015-11-30 10:48:56
【问题描述】:

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

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

'添加'动作视图:

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

'添加'动作控制器:

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

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

“编辑”操作视图:

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

$flagtypes 数组:

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

【问题讨论】:

标签: arrays cakephp checkbox bit-manipulation selected


【解决方案1】:

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

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

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

【讨论】:

    【解决方案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));
    

    【讨论】:

    • 尝试了这个建议,但复选框仍然没有显示为选中状态。我已经更新了原始帖子中的视图代码。
    • 如果你将值传递给像$selected = array($flagtypes[$results[0]['BitwiseFlag']]) 这样的$selected 数组呢?
    • 遗憾的是仍然没有运气。 $results[0]['BitwiseFlag'] 需要从 int 分解成 bits 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2017-09-30
    相关资源
    最近更新 更多