Как создать почву для галочки в Cakephp? а как его хранить? - PullRequest
1 голос
/ 06 января 2010

У меня есть поле с названием Хобби, я хочу сохранить все выбранные пользователем хобби, которые будут сохранены в базе данных как CSV. Как я могу сделать это в Cakephp?

1 Ответ

5 голосов
/ 06 января 2010

Вставить в представление (т. Е. 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') ?>

Вставить в контроллер Users (просто стандартный метод сохранения, здесь ничего особенного)

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

Вставить в пользовательскую модель

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

    return true;
}

Примечания:

  • Если вам нужно отделить хобби обратно при чтении модели User, вы можете использовать обратный вызов «afterFind» или проверить Serializable Behavior http://blog.matsimitsu.nl/code/206/serializeable-behavior-for-cakephp, который автоматически сериализует и десериализует всякий раз, когда вы пытаетесь добавить или извлечь из массива в / из БД.
  • Вместо этого вы можете добавить код beforeValidate к обратному вызову beforeSave, зависит только от того, какую проверку вы хотите выполнить. наличие кода в beforeValidate позволит вам выполнить базовую проверку notEmpty, однако в beforeSave вы сможете проверить наличие отдельных элементов в массиве.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...