有没有办法将工作委托给Laravel的另一个行动?

时间:2016-04-30 14:16:47

标签: laravel model-view-controller laravel-5 laravel-5.2

假设我们有两个模型:UsersPosts这些模型之间定义了多对多关系 - 用户可以有很多帖子,帖子可以有很多编辑者(用户)。

当此表单提交给PostsController时,它的store 操作不仅要处理新帖子的字段,还要处理它的编辑,这似乎不对。示例:

enter image description here

public function store()
{
    // creating a post
    $post = Post::create(request()->get('post_fields'));

    // adding editors to the post (this should be done somewhere else)
    $editors = request()->get('editors');
    foreach($editors as $editor){
        $post->editors()->attach($editor->id);
    }

    return redirect('/');
}

正如我已经提到的,这种做法对我来说似乎是错误和笨拙的。因此,我希望委派编辑处理任务到PostsEditorsController,这将是一个专门用于posts-editors关系管理的独立控制器。所以store现在看起来像这样:

public function store()
{
    // creating a post
    $post = Post::create(request()->get('post_fields'));

    $editors = request()->get('editors');
    PostsEditorsController::doSomething($post, $editors); // <-- just to show what I want to achieve

    return redirect('/');
}

我该怎么做?

1 个答案:

答案 0 :(得分:1)

如何将此逻辑添加到Post模型的保存事件中?

https://laravel.com/docs/5.2/eloquent#events

这样,这个逻辑会在模型保存的时候调用 ,如果你在系统中的任何其他位置添加编辑功能,可以省去担心保持同步的麻烦。