-1

我对 Yii 还很陌生,在尝试制作自己的博客应用程序时,我创建了这个功能来为我的帖子添加评论。

但是,我已经根据理论做了所有事情,但仍然得到:

Fatal error: Call to a member function addComment() on a non-object in /htdocs/blog/protected/controllers/PostController.php on line 63

我的 Post.php 模型类有这个功能:

public function addComment($comment){
        $comment->tbl_post_id = $this->id;
        return $comment->save();
    }

我的 PostController.php 有这两个函数,一个用于创建评论,另一个用于更改视图文件。

public function actionView($id)
   {
       $post=$this->loadModel($id);
       $comment=$this->createComment($post);
       $this->render('view',array(
         'model'=>$post,
            'comment'=>$comment,
)); }

    protected function createComment($post)
   {
     $comment=new Comment;
     if(isset($_POST['Comment']))
     {
       $comment->attributes=$_POST['Comment'];
       if($post->addComment($comment)) // **This is line 63**
       {
         Yii::app()->user->setFlash('commentSubmitted',"Your comment has been added." );
         $this->refresh();
       }
}
     return $comment;
   }

所以从逻辑上讲,我使用 $post->addComment 在 Post Model 类中调用成员函数 addComment,并且模型的所有成员函数都已初始化,对吗?从逻辑上讲,这不应该是正确的吗?但是,我收到了上述致命错误。

我究竟做错了什么?

任何帮助,将不胜感激。

问候,

PS - 如果我做了一些非常愚蠢的事情,我很抱歉。

4

2 回答 2

2

$post不是一个对象,因为你没有在任何地方声明它

 protected function createComment($issue)
 {
   $comment=new Comment;
   if(isset($_POST['Comment']))
   {
     $comment->attributes=$_POST['Comment'];
     if($post->addComment($comment)) // **This is line 63**
     {
       Yii::app()->user->setFlash('commentSubmitted',"Your comment has been added." );
       $this->refresh();
     }
   }
   return $comment;
 }

在第 63 行,他正在搜索一个名为$post但不存在的变量。你必须像你正在做的那样创建它或从数据库加载actionView()

$post=$this->loadModel($id);

显然要加载它,您需要$id将其传递给您的createComment()函数

于 2013-05-15T09:40:54.820 回答
0

您在Post Model 类中有addComment () 方法。因此,您可以通过任何控制器的Post Model 类的 Object 来处理此方法。

您的声明

 $post->addComment($comment) 

是正确的,但没有$post对象。所以只需创建 Post Model 的实例

$post=new Post(); 

最后你的代码应该像

 if(isset($_POST['Comment']))
 {
    $comment->attributes=$_POST['Comment'];
    $post=new Post(); 

    if($post->addComment($comment)) // **This is line 63**
    {
       Yii::app()->user->setFlash('commentSubmitted',"Your comment has been added." );
       $this->refresh();
    }
 }
于 2013-05-15T10:16:44.580 回答