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