我有一个评论模型,可以变换为许多模型。当我添加注释时,我想使用相同的Controller,如下所示:
Route::post('/user/{user}/comments', 'CommentController@store')
Route::post('/team/{team}/comments', 'CommentController@store')
如何区分商店方法中的模型?现在,似乎这是最好的选择:
public function store(Request $request, User $user = null, Team $team = null)
{
$parent = null;
if ($user !== null) { $parent = $user; }
if ($team !== null) { $parent = $team; }
// etc for all models, cumbersome and ugly....
$parent->comment('foo');
}
我知道我也可以在 CommentController 中使用不同的方法,即storeOnUser(Request $request, User $user) {}
,但有没有更好的方法可以解决这个问题?
答案 0 :(得分:0)
每个可评论的
都不需要额外的路线您只需要在每个表单中传递commentable_id和commentable_type
$Commentable ="App\".ucfirst($request->input('commentable_type'));
$commentable =$Commentable::findOrFail($request->input('commentable_id'));
$commentable->comments()->save($comment);
将数据放入隐藏输入
<input value="{{$model->id}}" type="hidden" name="commentable_id">
<input value="modelName" type="hidden" name="commentable_type">
答案 1 :(得分:0)
假设{user}
和{team}
是相应表格的primary id
。
public function store(Request $request, $id)
{
$parent = null;
if($request->route('user')) {
$parent = User::find($id);
}
if($request->route('team')){
$parent = Team::find($id);
}
// etc for all models, cumbersome and ugly....
$parent->comment('foo');
}