Laravel 5 控制器最佳实践

Laravel 5 Controller Best Practices

我将 Lumen 用作 REST API。我有一个 Post 模型和一个评论模型。

Post.php

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

Comment.php

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

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

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

以你为例 我会有 /Posts/CommentController.php 和资源方法

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

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

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

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

有什么不明白的可以问我