如何在Cakephp中创建一个复选框?以及如何存储?

1 checkbox cakephp

我有一个名为Hobbies的字段,我希望存储用户选择的所有爱好,以CSV格式存储在数据库中.我怎样才能在Cakephp中做到这一点?

Ben*_*son 5

粘贴到视图中(即views/users/add.ctp)

<?php echo $form->create('User', array('action' => 'add')) ?>
<?php echo $form->input('User.hobbies', array('type' => 'select',
                                              'multiple' => 'checkbox',
                                              'options' => array('sports' => 'sports',
                                                                 'movies' => 'movies',
                                                                 'games' => 'games'))) ?>
<?php echo $form->end('Save') ?>
Run Code Online (Sandbox Code Playgroud)

粘贴到用户控制器(只是标准的保存方法,这里没什么特别的)

function add() {
    if(!empty($this->data)) {
    if($this->User->saveAll($this->data, array('validate' => 'first'))) {
        $this->Session->setFlash('User saved successfully');
        } else {
        $this->Session->setFlash('User failed to save');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

粘贴到用户模型中

function beforeValidate() {
    // join hobbies into csv
    if(!empty($this->data['User']['hobbies'])) {
        $this->data['User']['hobbies'] = join(',', $this->data['User']['hobbies']);
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 如果在阅读User模型时需要将业余爱好分开,可以使用"afterFind"回调或查看Serializable Behavior http://blog.matsimitsu.nl/code/206/serializeable-behavior-for-cakephp每当您尝试向数据库添加数组或从数据库中提取数组时,它会自动序列化和反序列化.
  • 您可以将beforeValidate代码添加到beforeSave回调中,而只是取决于您要执行的验证类型.使用beforeValidate中的代码将允许您执行基本的notEmpty检查,但是在beforeSave中意味着您可以检查数组中是否存在单个项目.

参考文献: