0

我是 cakePHP 的新手,并试图了解框架以了解如何实现我的要求。

我的应用程序允许(管理员)用户定义表单(父)和 FormElements(子),稍后将动态组合并呈现给最终用户。

为了开始原型制作,我烘烤了所有的部分,我可以按预期在两个表中输入行。

编辑以简化问题:

表单控制器已经显示了一个表单列表,并且选择一个表单(查看操作),该表格的列表列表。但是......当我添加一个新的 FormElement 时,我必须再次选择一个与该元素关联的表单。

相反,我希望 FormElements 控制器/模型知道最初选择了哪个 Form 并自动填充 form_id。

是否有关于如何处理此问题的“最佳实践”方法?

以防万一需要:

CREATE TABLE IF NOT EXISTS `forms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(60) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `form_elements` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `form_id` int(11) NOT NULL,
  `name` varchar(40) NOT NULL,
  `type` int(11) NOT NULL,
  `widget` int(11) NOT NULL,
  `mandatory` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
4

1 回答 1

1

这种情况发生的频率比你想象的要多。我有 QuestionModel hasMany AnswerModel 并想在我的 AnswersController 中添加 Answers。我需要显示“父”对象的 QuestionModel 名称和其他属性。这就是我在 AnswersController 中添加操作的样子:

public function add($question_id = null) {
    $this->Answer->Question->id = $question_id;
    if (!$this->Answer->Question->exists()) {
        throw new NotFoundException(__('Invalid question'));
    }

    if ($this->request->is('post')) {
        $this->request->data['Answer']['question_id'] = $question_id;
        $this->request->data['Answer']['user_id'] = $this->Auth->user('id');

        if ($this->Answer->save($this->request->data)) {
            $this->Session->setFlashSuccess(__('Your answer has been saved'));
        } else {
            $this->Session->setFlashError(__('Your answer could not be saved. Please, try again.'));
        }
        $this->redirect(array('controller'=>'questions','action' => 'view', $question_id));
    }

    $question = $this->Answer->Question->read();
    $this->set('question', $question);
}

您会注意到我将 Question.id 传递给 AnswersController 添加操作。有了这个,我就可以从数据库中提取问题,并允许我能够将用户重定向回他们在单击“添加此问题的答案”之前所遇到的特定问题。

于 2013-03-31T17:59:38.820 回答