Laravel 5控制器最佳实践

时间:2018-04-14 12:16:12

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

我使用Lumen作为REST API。我有一个Post模型和一个Comment Model。

post.php中

public function comments(){
    return $this->hasMany('App\Comment');
}

Comment.php

public function post(){
    return $this->belongsTo('App\Post');
}

我也有这些模型的资源控制器。如果我想获得特定帖子的所有评论,我在哪里写这个逻辑?在PostController中(因为我将通过Post过滤评论)或者在CommentController中(因为我毕竟是在提取评论)?哪种方式更好?或者还有其他一些方法(比如创建一个单独的控制器)?我只想让结构正确并编写干净的代码。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

我个人喜欢遵循控制器没有任何自定义方法的模式。因此,您最终会得到许多非常精简的控制器,这些控制器使用通用资源方法,例如index update store create edit destroy

所以你的例子 我会使用资源方法/Posts/CommentController.php

答案 1 :(得分:1)

这实际上取决于要求以及您如何处理数据。通常,帖子列表页面上不会显示任何评论。所以最好只发送没有评论的帖子,这意味着逻辑将在后控制器中。 对于帖子详细信息页面,您将发送带有注释的帖子,因此逻辑仍然在Post Controller中。像这样:

Post::where('id', $id)->with('comments')->first();

如果您只需要发送没有帖子对象的特定帖子的评论,那么它将在评论控制器中。

Comment::where('post_id', $post_id)->get();

如果你有任何困惑,请问我。