在Laravel中管理同一个Controller中的不同模型

时间:2018-01-11 09:39:14

标签: laravel

我有一个评论模型,可以变换为许多模型。当我添加注释时,我想使用相同的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) {},但有没有更好的方法可以解决这个问题?

2 个答案:

答案 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');
}