假设我有一个帖子表和一个评论表。我希望我/ 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));
}
并在视图中
<?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));?>
这里有什么不对,不允许将记录发布到cmts表中?
此外,正如您所见,我将帖子ID硬编码到该表单中,因为无论出于何种原因,选择框都不会填充帖子ID。任何帮助也将不胜感激。
答案 0 :(得分:6)
创建表单时,可以使用url参数显式设置表单操作:
$this->Form->create('Cmt', array('url'=>$this->Html->url(array('controller'=>'cmts', 'action'=>'add'))));
至于帖子ID,我假设你在帖子和评论之间有一对多的关系。如果是这种情况,您应该只能在视图中执行以下操作:echo $this->Form->input('post_id', array('type'=>'hidden'));
然后,在您的视图功能中,设置$this->data['Cmt']['post_id'] = $post['Post']['id'];
以使其自动填充。
答案 1 :(得分:4)
我认为最好这样做......
$this->Form->create('Cmt', array('url'=>array('controller'=>'cmts', 'action'=>'add')));
选项['url']已经使用控制器和动作处理数组。
您可以在此处找到它:http://book.cakephp.org/view/1384/Creating-Forms#options-url-1387
答案 2 :(得分:1)
也可以使用
$this->Form->create('Cmt', array( 'action' => 'add' ));
因为这将带你到cmts控制器和动作添加将被调用。
答案 3 :(得分:0)
如果要为Comments提交数据,最好在CmtsController中处理它。
PostsController中的视图文件正常
<?php echo $this->Form->create('Cmt');?>
将生成表单操作“/ autogenerated_cake_base_url / cmts / view”,您可以在CmtsController处理,而不是在PostsController中处理。