【发布时间】:2017-03-31 13:55:43
【问题描述】:
我试图找出在 Laravel 中实现多态关系的正确方法,使用的示例是允许相同的“评论”模型与“帖子”和“视频”都有关系。
这与 Laravel 文档中的示例相同,如下所示:
posts
id - integer
title - string
body - text
videos
id - integer
title - string
url - string
comments
id - integer
body - text
commentable_id - integer
commentable_type - string
我已经设置了模型来回建立关系 - 没有问题。我的问题是如何最有效地使用 CommentsController?我希望能够使用相同的 CommentsController@store 方法来存储任何类型的评论,无论是帖子还是视频。
这个,而不是有一个 CommentsController@storePostComment 和一个 CommentsController@storeVideoComment 的替代方案。
我的路线设置如下:
Route::post('/posts/{post}/comments', 'CommentsController@store');
Route::post('/videos/{video}/comments', 'CommentsController@store');
我的 CommentsController@store 方法设置如下,目前仅用于帖子:
class CommentsController extends Controller
{
public function store(Post $post)
{
$post->addComment(request('body'));
return back();
}
}
Laravel 的路由模型绑定抓取正确的 Post 并且 addComment() 方法保存评论。
我的问题是如何修改它以接受相同方法的帖子或视频?我确信这是正确的方法,而不是为每个方法创建单独的方法,但不知道如何去做。
【问题讨论】:
标签: php laravel routes eloquent