user()->addresses; // 获取省份和城市数据 $provinces = DB::table('provinces')->get(); // 获取所有省份 $cities = DB::table('cities')->where('province_id', $provinces->first()->id)->get(); // 获取第一个省的城市 // 返回地址列表视图 return view('user.addresses.index', compact('addresses', 'provinces', 'cities')); } /** * 存储新地址 * * @param AddressRequest $request * @return \Illuminate\Http\RedirectResponse */ public function store(AddressRequest $request) { // 获取格式化的请求数据 $addressesData = $this->getFormatRequest($request); /** * @var $user User */ $user = auth()->user(); // 获取当前用户 $user->addresses()->create($addressesData); // 创建新地址 // 返回带有成功消息的重定向 return back()->with('status', '创建成功'); } /** * 显示指定地址的详细信息 * * @param Address $address * @return Address */ public function show(Address $address) { return $address; // 返回地址实例 } /** * 显示编辑地址的表单 * * @param Address $address * @return \Illuminate\View\View */ public function edit(Address $address) { // 检查当前用户是否有权限编辑该地址 if (auth()->id() != $address->user_id) { abort(403, '非法操作'); // 如果没有权限,返回403错误 } // 获取当前用户的地址 $addresses = auth()->user()->addresses; // 获取省份和城市数据 $provinces = DB::table('provinces')->get(); // 获取所有省份 $cities = DB::table('cities')->where('province_id', $address->province_id)->get(); // 获取指定省的城市 // 返回编辑地址的视图 return view('user.addresses.edit', compact('addresses', 'address', 'provinces', 'cities')); } /** * 更新指定地址 * * @param AddressRequest $request * @param Address $address * @return \Illuminate\Http\RedirectResponse */ public function update(AddressRequest $request, Address $address) { // 检查当前用户是否有权限更新该地址 if (auth()->id() != $address->user_id) { abort(403, '非法操作'); // 如果没有权限,返回403错误 } // 获取格式化的请求数据 $addressesData = $this->getFormatRequest($request); $address->update($addressesData); // 更新地址 // 返回带有成功消息的重定向 return back()->with('status', '修改成功'); } /** * 删除指定地址 * * @param Address $address * @return \Illuminate\Http\JsonResponse */ public function destroy(Address $address) { // 检查当前用户是否有权限删除该地址 if (auth()->id() != $address->user_id) { return responseJson(400, '非法操作'); // 如果没有权限,返回400错误 } $address->delete(); // 删除地址 // 返回成功的 JSON 响应 return responseJson(200, '删除成功'); } /** * 设置默认地址 * * @param Address $address * @return \Illuminate\Http\JsonResponse */ public function setDefaultAddress(Address $address) { // 检查当前用户是否有权限设置该地址为默认 if (auth()->id() != $address->user_id) { return responseJson(400, '非法操作'); // 如果没有权限,返回400错误 } // 将当前用户的所有地址设置为非默认 Address::query()->where('user_id', $address->user_id)->update(['is_default' => 0]); $address->is_default = 1; // 将指定地址设置为默认 if ($address->save()) { return responseJson(0, '设置成功'); // 返回成功的 JSON 响应 } return responseJson(400, '请稍后再试!'); // 返回失败的 JSON 响应 } /** * 格式化请求数据 * * @param Request $request * @return array */ protected function getFormatRequest(Request $request) { // 只获取指定的请求参数 return $request->only(['name', 'phone', 'province_id', 'city_id', 'detail_address']); } /** * 根据省份 ID 获取城市 * * @param Request $request * @return \Illuminate\Support\Collection */ public function getCities(Request $request) { // 根据省份 ID 查询城市 return DB::table('cities')->where('province_id', $request->input('province_id'))->get(); } }