|
|
<?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();
|
|
|
}
|
|
|
}
|