通过CakePHP中的post表单将id传递给方法

时间:2012-02-29 23:58:33

标签: php cakephp

我有以下情况:

用户正在以下网址查看我的应用上的帖子:/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中的查询/命名参数更加一致。

3 个答案:

答案 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