Php 在Laravel中将多种类型的模型绑定到同一控制器方法的路由模型

Php 在Laravel中将多种类型的模型绑定到同一控制器方法的路由模型,php,laravel,routes,eloquent,Php,Laravel,Routes,Eloquent,我正试图通过允许同一个“评论”模型与“帖子”和“视频”同时存在关系的示例,找出在Laravel中实现多态关系的正确方法 这与Laravel文档中的示例相同,如下所示: posts id - integer title - string body - text videos id - integer title - string url - string comments id - integer body - text

我正试图通过允许同一个“评论”模型与“帖子”和“视频”同时存在关系的示例,找出在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
Route::post('/posts/{post}/comments', 'CommentsController@store'); 
Route::post('/videos/{video}/comments', 'CommentsController@store');
我已经建立了模型,并且前后都有关系——没有问题。我的问题是如何最有效地使用CommentsController?我希望能够使用相同的CommentsController@store方法来存储任何类型的评论,无论是帖子还是视频

这,而不是有一个CommentsController@storePostComment和CommentsController@storeVideoComment.

我的路线设置如下:

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
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的路由模型绑定获取正确的帖子,addComment()方法保存评论

我的问题是,我如何修改它以接受相同方法的帖子或视频?我确信这是正确的方法,而不是为每个方法创建单独的方法,但不确定如何进行。

尝试使用SEGMENT

public function store($data)  //{post} or {video} comes here
{
   if(Request::segment(1) == 'posts'){
       $post = new Post;
       $post->addComment(request('body'));
   }else if(Request::segment(1) == 'videos'){
       $video = new Video;
       $video->addComment(request('url'));
   }     
   return back(); 
}
尝试使用段

public function store($data)  //{post} or {video} comes here
{
   if(Request::segment(1) == 'posts'){
       $post = new Post;
       $post->addComment(request('body'));
   }else if(Request::segment(1) == 'videos'){
       $video = new Video;
       $video->addComment(request('url'));
   }     
   return back(); 
}

谢谢你的回复。我现在要这样做!我希望有一种方法可以自动检测类型并分配。。。界面上的一些东西,但我们会继续努力找出答案。你对此有进一步的了解吗?谢谢你的回复。我现在要这样做!我希望有一种方法可以自动检测类型并分配。。。一些与界面线类似的东西,但会一直尝试解决。你对此有进一步的了解吗?