You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aquaculture/app/Http/Controllers/User/AddressController.php

183 lines
5.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Http\Controllers\User; // 定义命名空间
use App\Http\Requests\AddressRequest; // 引入地址请求验证类
use App\Models\Address; // 引入地址模型
use App\Models\User; // 引入用户模型
use Auth; // 引入认证类
use DB; // 引入数据库门面
use Illuminate\Http\Request; // 引入请求类
use App\Http\Controllers\Controller; // 引入基础控制器类
/**
* 地址控制器
*
* 该控制器处理用户地址的增删改查操作。
*/
class AddressController extends Controller
{
/**
* 显示用户的地址列表
*
* @return \Illuminate\View\View
*/
public function index()
{
// 获取当前用户的地址
$addresses = auth()->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();
}
}