2013-01-08 90 views
0

用繩子checboxes當添加一條記錄,我讓用戶標記儘可能多的複選框,需要:CakePHP的選擇DB

echo $this->Form->input('us_roles', array('label' => 'Roles:', 'type'=> 'select', 'multiple'=>'checkbox','options' => $arr_pr_role)); 

和存儲選擇索引字符串字段在我的BD沒有問題。 (它保存例如1,2,3)

但是,在編輯該記錄時,複選框不會被填充-selected-accodingly。 (基於字符串文本,例如,1,2,3

我怎麼能有我的checkboxex反映存儲在一個數據庫中的字符串值?

我的編輯視圖使用同我添加視圖:

echo $this->Form->input('us_roles', array('label' => 'Roles:', 'type'=> 'select', 'multiple'=>'checkbox','options' => $arr_pr_role)); 

* *更多細節

當添加一個新的記錄,我爆從選擇中的選擇到我的數據:

$this->request->data['User']['us_roles'] = implode(",", $this->request->data['User']['us_roles']); 

保存已編輯的記錄時是同樣的事情。

問題是檢索後,如何將字符串轉換爲我的us_roles輸入?

echo $this->Form->input('us_roles', array('label' => 'Roles:', 'type'=> 'select', 'multiple'=>'checkbox','options' => $arr_pr_role)); 

你能幫忙嗎?

---更新,固定---

public function edit($id = null) { 
    $this->User->id = $id; 
    if (!$this->User->exists()) { 
     throw new NotFoundException(__('Invalid user')); 
    } 
    if ($this->request->is('post') || $this->request->is('put')) { 
     $this->request->data['User']['us_roles'] = implode(",", $this->request->data['User']['us_roles']); 
     if ($this->User->save($this->request->data)) { 
... 
} else { 
      $this->request->data = $this->User->read(null, $id); 
     $this->request->data['User']['us_roles'] = explode(",", $this->request->data['User']['us_roles']); 

} 
+0

你如何讀取數據並將其傳遞給你的編輯表單?你如何填充'$ this-> request-> data'數組可以這麼說? – mark

+0

thx @mark,請參閱最新問題的底部。 –

+1

你爲什麼會內爆?對於選擇表單字段,這絕不是一個好主意。 – mark

回答

0

現在我明白了... 您正在尋找破滅的對面()。 那會爆炸()。

或者你可以使用String類(http://book.cakephp.org/2.0/en/core-utility-libraries/string.html#String::tokenize):

$array = String::tokenize($string, ','); 

應該讓你自己的價值觀的陣列回來。

但請相信我,通常有更好的方法來做到這一點。 你可以讓它成爲另一個數據庫表+模型。你可以使用ArrayDatasource,你可以像我這樣使用一些位掩碼的解決方案(http://www.dereuromark.de/2012/02/26/bitmasked-using-bitmasks-in-cakephp/)。 最後一種方法的優點是,您仍然只使用單個字段(並且空間非常小),同時具有額外表格的全部功能:在NOT,AND,OR,...上的完整搜索...

+0

謝謝@mark。我必須手動遍歷數組來填充我的輸入(多個複選框)還是有辦法將數組(從爆炸我的數據庫字符串)分配給我的輸入?這在我看來是完成的嗎?我非常感謝你的幫助。 –

+0

發佈您的數據並調試發佈數據。這就是你的數組在編輯控制器中的樣子。同樣,這應該在控制器中填充'$ this-> request-> data',就像所有的編輯操作一樣。 – mark

+0

請參閱默認值章節:http://www.dereuromark.de/2010/06/23/working-with-forms/ – mark