如何在另一个控制器中提交一个模型的表单?

CDe*_*ney 3 cakephp

假设我有一个帖子表和一个评论表.我希望我/ 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'];为自动填充它.