Yii,致命错误:在非对象上调用成员函数addComment()

时间:2013-05-15 09:38:36

标签: php yii fatal-error

我是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,并且模型的所有成员函数都被初始化了吗?而逻辑上这不应该是正确的吗?但是,我收到了上述致命错误。

我做错了什么?

任何帮助都将不胜感激。

此致

P.S - 如果我做的事情非常愚蠢,我很抱歉。

2 个答案:

答案 0 :(得分: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()

中那样创建它或从db加载
$post=$this->loadModel($id);

显然,要加载它,您需要$id必须传递到createComment()函数

答案 1 :(得分:0)

帖子模型类中有 addComment ()方法。因此,您可以通过任何控制器的发布模型类的对象来处理此方法。

您的声明

 $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();
    }
 }