设计父子控制器

时间:2013-02-10 00:31:12

标签: cakephp-2.0

我是CakePHP的新手,试图了解如何实现我的要求。

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

为了开始原型设计,我烘焙了所有碎片,我可以按预期在两个表格中输入行。

编辑以简化问题:

Forms控件已经显示了一个表单列表,当选择一个表单时(查看操作),该表单的FormElements列表。 但是......当我添加一个新的FormElement时,我必须再次选择一个Element将与之关联的Form。

相反,我希望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;

1 个答案:

答案 0 :(得分: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添加操作。有这个允许我从数据库中提取问题,并允许我能够在用户点击“添加此问题的答案”之前将用户重定向回他们所处的具体问题。