-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 には、コメントを作成するための関数と、ビュー ファイルを変更するための関数の 2 つの関数があります。

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 Model クラス内で $post->addComment を使用してメンバー関数 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;
 }

$post63 行目で、存在しないという名前の変数を探しています。あなたはそれを作成するか、あなたがあなたにやっているようにdbからロードする必要があります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 に答える