你不能做两个相似的 URL。我认为您的网址路线
localhost:8000/api/gadgets/{{imei_code}}
不起作用。此外,路由的顺序也很重要,首先定义的路由将比第二个定义的路由具有更高的优先级。
因为你的路由 /api/gadgets/{{id}} 和 /api/gadgets/{{imei_code}} 在这种情况下是相似的,所以只会处理前面描述的那个。
您可以定义另一个路由器和处理程序,例如:
本地主机:8000/api/gadgets
默认情况下,这将返回小工具列表,您可以为 imei_code 添加过滤器。例如:
localhost:8000/api/gadgets?imei_code=123
你的新路由的处理程序可能会写成这样:
public function showList(Request $request): GadgetResource
{
if ($imeiCode = $request->query('imei_code')) {
$list = Gadget::query()->where('imei_code',$imeiCode)->get();
} else {
$list = Gadget::query()->take(10)->get();
}
return GadgetResource::collection($list);
}
或者像替代解决方案一样,您可以通过imei_code创建不同的路径来搜索小工具,以消除任何路径冲突
本地主机:8000/api/gadgets/by_imei/123
public function findByImei(Request $request): GadgetResource
{
$imeiCode = $request->route('imei_code');
$item = Gadget::query()->where('imei_code',$imeiCode)->first();
return new GadgetResource($item);
}
,
尝试改变响应
public function show(Gadgets $gadget)
{
$response = ['data' => new GadgetResource($gadget),'message' => 'specific gadget'];
return response()->json($response);
}
,
您可以通过范围指定模型键 - 检查 docs
Route::resource('gadgets',GadgetController::class)->scoped([
'gadget' => 'imei_code'
]);
然后,当 Laravel 尝试在 Controller 中绑定 Gadget 模型时 - 模型将通过键 imei_code
进行搜索。
这段代码相当于
Route::get('/gadget/{gadget:imei_code}');
本文链接:https://www.f2er.com/1228.html