cakephp选择带有来自db的字符串的复选框

时间:2013-01-08 00:29:42

标签: cakephp select auto-populate

添加记录时,我允许用户标记所需的复选框:

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

并将选定的索引存储到我的bd上的字符串字段而没有问题。 (它节省了例如1,2,3)

但是,在编辑该记录时,复选框不会被填充 - 选择 - 正确。 (基于字符串文本,例如,1,2,3

如何让checkboxex反映在db上存储为字符串的值?

我的编辑视图使用与添加视图相同的内容:

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

* * 更多细节

添加新记录时,我将select中的选项内插到我的数据中:

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

 }  

1 个答案:

答案 0 :(得分:0)

现在我明白了...... 你正在寻找与implode()相反的东西。 那会爆炸()。

或者您可以使用字符串类(http://book.cakephp.org/2.0/en/core-utility-libraries/string.html#String::tokenize):

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

应该为您提供值数组。

但请相信我,通常有更好的方法。 你可以使它成为另一个db表+模型。您可以使用ArrayDatasource,您可以使用一些像我一样的bitmasked解决方案(http://www.dereuromark.de/2012/02/26/bitmasked-using-bitmasks-in-cakephp/)。 最后一种方法的优点是,当您具有额外表格的全部功能时,您仍然只使用单个字段(以及非常小的空间):完全搜索NOT,AND,OR,...