2015-11-30 19 views
0

我正在CakePHP 2.6中開發一個應用程序,我有一個窗體,用戶可以在創建日曆事件時設置一系列標誌。如何使用CakePHP中的Bitwise標記複選框?

我已經成功設置了'add'動作來顯示標誌,並在驗證後在控制器中循環並將值保存到我的表中。該過程使用按位完成。下面的代碼示例:

'加' 行動的看法:

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

$結果[0] [ 'BitwiseFlag'] =在表32中。

$ flagtypes陣列:

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

+0

你可能想看看[Bitmasked Behavior](https://github.com/dereuromark/cakephp-tools/blob/2.x/Model/Behavior/BitmaskedBehavior.php)和[article](http: //www.dereuromark.de/2012/02/26/bitmasked-using-bitmasks-in-cakephp/)。 – mark

回答

0

不能完全確保您的表單中的數據結構是什麼樣子,但你應該能夠設置來自您的控制器內的標誌。在$this->request->data設置相關的值,這樣的事情: -

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

然後,當你使用它$this->Form->input('flag', [...])應該檢查正確的標誌爲您服務。

0

您輸入線改成這樣:

$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)); 
+0

嘗試了此建議,並且複選框仍未顯示爲已選中狀態。我已更新了原始帖子中的視圖代碼。 – Daniel

+0

如果將值傳遞給$ selected = array($ flagtypes [$ results [0] ['BitwiseFlag']])'',那麼該怎麼辦? – jitendrapurohit

+0

悲傷依舊沒有運氣。是否需要將'$ results [0] ['BitwiseFlag']'從int分解爲位? – Daniel