是否可以创建一个隐式路由,如果找不到该东西,则创建该路径?我正在使用Laravel 5.5.13。
例如,这是我隐含的路线:
Route::post('thumbs/{player}', 'ThumbController@store');
在我的控制器中就是这样:
public function store(Request $request, Player $player)
{
$thumb = new Thumb($request->all());
$player->thumbs()->save($thumb);
return response()->json($thumb, 201);
}
现在,如果我转到..../api/thumb/1
的端点,它会创建一个与Player
身份1
相关的拇指。但是,我想提供一个像这样的字符串而不是id号:
..../api/thumb/PLAYER_NAME
..../api/thumb/Blagoh
的例子,那么我的终点应首先找到一个玩家是否存在名称" Blagoh",如果它没有,那么它应该创建它。我无法想出这个。
答案 0 :(得分:1)
你应该做的是添加boot
RouteServiceProvider
这样的方法:
Route::bind('player', function ($value) {
if ($player = \App\Player::find($value)) {
return $player;
}
return Player::create(['name' => $value]);
});
它被称为显式绑定,您可以更新逻辑,如上所示。 Reference - Route model binding