Laravel从其他控制器调用控制器动作

时间:2018-04-19 15:41:02

标签: laravel api events laravel-5 model-view-controller

我有post模型,user模型和point模型。

每当用户发布新帖子时,他们都会添加一个点(点数表中的新行)。

我为每个模型设置了控制器。

添加帖子后应该/如何从PointsController@store拨打PostsController@store

或者这是错误的方法吗?

Full code on GitHub

2 个答案:

答案 0 :(得分:0)

考虑使用模态。

例如,在PointsController

public function store() {
    // your code
    User::addPoint(); // this is responsible for adding the point
}

PostsController

public function store() {
    // your code
    User::addPoint(); // call this again
}

这样,您就有了一个负责更新帖子的模型。

答案 1 :(得分:0)

选项1:使用模型

在PostController中

public function store(Request $request){
\Auth::user()->post()->create($request->all()); 
\Auth::user()->points()->create['point'=> 1]; // add your columns here
}

点模型

protected $fillable = ['point']; //add here  list of columns you want to use on \Auth::user()->points->create['point'=> 1];

选项2:使用观察者

像这里创建一个观察者类。我会在app /

中创建一个Observers文件夹

https://laravel.com/docs/5.5/eloquent#observers

称之为PostObserver

在postObserver中的

创建方法:

 public function created(Post $post)
    {
        $post->user()->points()->create['point'=> 1]; // [column1=>value1, column2=>value2]
    }

点模型

protected $fillable = ['point']; //add here  list of columns you want to use on \Auth::user()->points->create['point'=> 1];

在方法启动中的AppServiceProvider中添加

public function boot()
{
 Post::observe(PostObserver::class);
}

不要忘记添加正确的命名空间,然后在AppServiceProvider中添加使用Observers \ PostObserver