我是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 - 如果我做的事情非常愚蠢,我很抱歉。
答案 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()
$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();
}
}