2016-12-04 180 views
0

我称为所有模型帐户,发布,评论,任务和交互如何使用应用程序服务提供商为此

但我有一个错误。这是错误:

Type error: Argument 1 passed to App\Providers\AppServiceProvider::App\Providers{closure}() must be an instance of App\Account, instance of App\Post given

这是我的代码:

public function boot(){ 
    Post::saved(function(Account $account, Account $from, Post $post){ 
     if ($post->isIntractable()) { 
      $interaction = Interaction::add($post, $from, $account); 
      Task::add($interaction); 
     } 
    }); 

    Comment::saved(function ($account, $from, Comment $comment){ 
     $interaction = Interaction::add($comment, $from, $account); 
     Task::add($interaction); 

     $raw_data = json_decode($comment->raw_data, true); 
     $replies = Comment::makeOrUpdateGraphEdge(array_get($raw_data, 'comments')); 
     foreach ($replies as $reply) { 
      $raw_data = json_decode($reply->raw_data, true); 
      $from = $this->cacheAccount($raw_data['from']); 
      $this->cacheReplies($account, $from, $comment, $reply); 
     } 
    }); 
} 

private function cachePost(Account $account, Account $from, Post $post) { 
    $post->account()->associate($account); 
    $post->from()->associate($from); 
    $post->save(); 
    /* if ($post->isIntractable()) { 
     $interaction = Interaction::add($post, $from, $account); 
     Task::add($interaction); 
    }*/ 
} 

回答

0

模型事件期望只有一个参数,这是触发该事件的模型。你的情况,例如:

Post::saved(function(Post $post){ 
    if ($post->isIntractable()) { 
     $interaction = Interaction::add($post, $from, $account); // this will throw error as the variables are not recognized by the event. 
     Task::add($interaction); 
    } 
}); 

如果您需要更多参数传递,你需要找到一种方式触发save()行动前附加这些参数的Post模型。