CakePHP博客教程评论系统

CakePHP博客教程评论系统,cakephp,Cakephp,我通过在每篇文章中添加评论来构建博客引擎的CakePHP教程。我可以通过选择框选择应该附加到的帖子来添加评论。我想能够点击一个“添加评论”的帖子内的链接,并有关联到该职位的程序形成。我不确定如何将post\u id传递给我的comments\u控制器中的add方法。我的add方法的主体是自动生成的scaffold代码。是否像向add方法添加$postId参数并将其写入我的评论模型中的post_id那样简单?但这感觉不太对,因为我希望在我的提交按钮单击我的评论添加视图时调用add 谢谢大家 编辑-

我通过在每篇文章中添加评论来构建博客引擎的CakePHP教程。我可以通过选择框选择应该附加到的帖子来添加评论。我想能够点击一个“添加评论”的帖子内的链接,并有关联到该职位的程序形成。我不确定如何将post\u id传递给我的comments\u控制器中的add方法。我的add方法的主体是自动生成的scaffold代码。是否像向add方法添加$postId参数并将其写入我的评论模型中的post_id那样简单?但这感觉不太对,因为我希望在我的提交按钮单击我的评论添加视图时调用add

谢谢大家

编辑-添加了我当前正在使用的代码。它只是我的控制器中的add方法

function add($postid = null) {             
    if(!empty($this->data) {
         $this->Comment->create();                          
         $this->Comment->post_id = $postid;
         if ($this->Comment->save($this->data)) {
            $this->Session->setFlash(__('The Comment has been saved', true));
            $this->redirect(array('action' => 'index'));
         } else {
             $this->Session->setFlash(__('The Comment could not be saved. Please, 
                                          try again.', true));
         }
    }   
    $this->set('post_id', $postid);     
    print_r($postid);
}

在博客文章底部创建链接,如下所示:

<?php echo $html->link('Add Comment', array('controller'=>'Comments','action'=>'add',$post->id)) ?>

我想,类似这样对你会很好。然后您的url将是
example.com/comments/add/3
但请仔细检查代码,因为这是早上的第一件事,我们的牛奶用完了,所以我没有喝咖啡!)

谢谢你的推送!正确的代码行应该是:$this->Comment->set('post_id',$postid);仅当您将其从注释控制器推送到视图时。在处理控制器中发布的数据时,可以从$this->data访问所有数据,以便在需要时直接覆盖值。我认为我已经解决了这个问题,这有点过早。如果我写一个字符串($this->Comment->post_id='1'),我可以使用您推荐的方法和其他几种方法存储值。如果我使用$postid变量,0将写入我的comments表条目的post_id字段。有什么想法吗?我可以使用print\u r并看到$postid是我传递给add函数的内容。有什么想法吗?你在哪里做你的
print\u r()
你也可以用
pr()
蛋糕速记。听起来好像你的变量没有被传递。我已经编辑了我的原始帖子以显示我的当前代码。我正在执行print_r()作为add方法的最后一行。add是否会被多次调用?一次当我转到添加页面,一次当我发布表单数据时?当我这样做时,会抛出警告512“SQL错误:1048:列'post_id'不能为null”。你在开玩笑吗?当然,你必须提供$post_id=。我不是在开玩笑。我添加了一个变量$post_id并将其设置为=,它将在我的表中写出该值,但一旦我切换回该变量(或设置$post_id=$postid),我就会再次收到警告512。我已经为此奋斗了一个星期,不知道我出了什么问题,或者我不了解这个框架。你应该从url(/comments/add/post_id/)或者通过comment add form中的隐藏字段设置post_id:$form->input('post_id',array('type'=>'hidden'),然后你不需要行$this->data['comment']['post_id']=$posted;您还可以尝试将添加到项目中。特别是当您计划将功能添加到更多模型时。如果这是针对2.x的,那么在2.x分支中也应该有一个插件。
function add($postid){
  $this->data->Comment->post_id = $postid;
  $this->data->Save();
}
function add($postid = null) {             
    if(!empty($this->data) {
         $this->Comment->create();                          
         $this->data['Comment']['post_id'] = $postid; // see how it needs to be?
         ...then save the data...