假设我有一个帖子表和一个评论表.我希望我/ posts/view/page在同一页面上有一个表单来提交评论,就像任何典型的博客一样.我不知道我在哪里出错了,但这是我试过的:
class PostsController extends AppController {
var $name = 'Posts';
var $uses = array('Post', 'Cmt');
function view($id = null) {
...
if (!empty($this->data)) {
$this->Cmt->create();
if ($this->Cmt->save($this->data)) {
$this->Session->setFlash(__('The cmt has been saved', true));
}
}
$this->set('post', $this->Post->read(null, $id));
}
Run Code Online (Sandbox Code Playgroud)
并在视图中
<?php echo $this->Form->create('Cmt');?>
<fieldset>
<?php
echo $this->Form->input('name');
echo $this->Form->input('email');
echo $this->Form->input('title');
echo $this->Form->input('content');
?>
<div class="input select required"><label for="CmtStpageId">Post</label>
<select id="CmtPostId" name="data[Cmt][post_id]">
<option value="1">postname</option>
</select>
</div>
</fieldset>
<?php echo $this->Form->end(__('Submit', true));?>
Run Code Online (Sandbox Code Playgroud)
这里有什么不对,不允许将记录发布到cmts表中?
此外,正如您所见,我将帖子ID硬编码到该表单中,因为无论出于何种原因,选择框都不会填充帖子ID.任何帮助也将受到赞赏.
小智 6
创建表单时,可以使用url参数显式设置表单操作:
$this->Form->create('Cmt', array('url'=>$this->Html->url(array('controller'=>'cmts', 'action'=>'add'))));
Run Code Online (Sandbox Code Playgroud)
至于帖子ID,我假设你在帖子和评论之间有一对多的关系.如果是这种情况,您应该只能在视图中执行以下操作: echo $this->Form->input('post_id', array('type'=>'hidden')); 然后,在视图功能中,设置$this->data['Cmt']['post_id'] = $post['Post']['id'];为自动填充它.