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();
有什么不明白的可以问我
我将 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();
有什么不明白的可以问我