Php 在Laravel中将多种类型的模型绑定到同一控制器方法的路由模型
我正试图通过允许同一个“评论”模型与“帖子”和“视频”同时存在关系的示例,找出在Laravel中实现多态关系的正确方法 这与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
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();
}
谢谢你的回复。我现在要这样做!我希望有一种方法可以自动检测类型并分配。。。界面上的一些东西,但我们会继续努力找出答案。你对此有进一步的了解吗?谢谢你的回复。我现在要这样做!我希望有一种方法可以自动检测类型并分配。。。一些与界面线类似的东西,但会一直尝试解决。你对此有进一步的了解吗?