我有以下情况:
用户正在以下网址查看我的应用上的帖子:/posts/Post_tile-210
我希望他们能够针对这篇文章创建评论。这将通过在注释表中使用post id作为外键在注释和post之间创建关系来完成。
我的问题是,我看到三种可能的方法来传递帖子ID以添加评论方法:
1。)通过表单操作传递帖子ID,如:/comment/add/id:210
2。)通过隐藏字段传递帖子ID,如:<input type="hidden" name="id" value="210">
3。)通过url本身在控制器方法中获取post id
最好的方法是什么,优点和缺点是什么?我喜欢第一个最好的,因为它似乎很好,易于设置,并且感觉与Cake Apps中的查询/命名参数更加一致。
答案 0 :(得分:2)
由于您的评论模型和表格中有post_id
,因此更容易使用隐藏字段:
echo $this->Form->input('post_id', array('type' => 'hidden', 'value' => $post_id));
当您提交此表单时,您将获得一个完整的数组,以便您使用post foreing key保存注释。
答案 1 :(得分:2)
你可以这样做。您可以将其发布为隐藏字段:
echo $this->Form->input('post_id', array('type' => 'hidden', 'value' => $post_id));
或作为提交的参数:
echo $this->Form->input('Post', array('type' => 'post', 'url' => array('controller' => 'posts', 'action' => 'add', $post_id)));
将post_id设为隐藏字段将为您提供已在请求中包含post_id的优势,而无需任何其他代码将其与$this->Model->save
一起使用,因为它将包含在$this->data['Comment']['post_id']
中。这意味着您只需要拨打$this->Comment->save($this->data);
,它就会将其保存到表格中。
如果您将URL作为参数传递给它,则需要进行设置,以便以两种方式之一进行保存:
$this->data['Comment']['post_id'] = $post_id;
或
$this->Comment->post_id = $post_id;
因此,最佳做法是将其作为表格中的隐藏字段。
答案 2 :(得分:1)
我会设置控制器方法,如:
function add(post_id){
并传递
URL/comment/add/variable