You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell调用Laravel 11 PUT接口更新描述失败,仅存空值/Null

PowerShell发送PUT请求更新Laravel 11企业描述时内容为空的问题

使用PowerShell向Laravel 11后端发送PUT请求更新企业描述,权限验证正常(伪造令牌或其他用户会被正确拦截并提示无权限),但新的描述值从未存入数据库,仅会被更新为null或空字符串。

控制器代码

public function updateDescription(Request $request, $id)
{
    \Log::info('Request body:', (array)$request->json()->all());

    $company = Company::findOrFail($id);

    // 验证当前登录用户是否为企业管理员
    if (Auth::user()->id !== $company->user_id) {
        return response()->json(['message' => '你没有权限编辑该描述。'], 403);
    }

    $company->description = $request->description;
    $company->save();

    return response()->json(['message' => '描述更新成功。']);
}

PowerShell请求及响应

PS C:\Users\DevZone> Invoke-WebRequest -Uri "http://localhost:8000/api/companies/1/description" -Method PUT -Headers @{ "Authorization" = "Bearer $token"; "Content-Type" = "application/json" } -Body $body

StatusCode        : 200
StatusDescription : OK
Content           : {"message":"描述更新成功。"}
RawContent        : HTTP/1.1 200 OK
                    Host: localhost:8000
                    Connection: close
                    Access-Control-Allow-Origin: http://localhost:3000
                    Access-Control-Allow-Credentials: true
                    Cache-Control: no-cache, private
                    Content-Type: ap...
Forms             : {}
Headers           : {[Host, localhost:8000], [Connection, close], [Access-Control-Allow-Origin,
                    http://localhost:3000], [Access-Control-Allow-Credentials, true]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 58

路由配置(routes/api.php)

Route::middleware(['auth:sanctum'])->put('/companies/{id}/description', [CompanyController::class, 'updateDescription']);

已尝试的操作

$body = $descriptionObj | ConvertTo-Json

Laravel日志记录

[2024-09-20 01:26:18] local.INFO: Request body:  

问题分析

Laravel日志显示请求体为空,说明PowerShell发送的JSON数据未被后端正确接收,导致$request->description取不到有效值,最终数据库字段被更新为null或空字符串。

解决方法

  1. 构造正确的请求对象
    确保$descriptionObj包含目标字段:

    $descriptionObj = @{
        description = "你的新企业描述内容"
    }
    
  2. 生成标准JSON格式
    使用-Depth参数确保JSON转换完整,避免默认层级限制导致的格式错误:

    $body = $descriptionObj | ConvertTo-Json -Depth 10
    
  3. 验证请求体内容
    发送请求前打印$body,确认输出为标准JSON:

    {
        "description": "你的新企业描述内容"
    }
    
  4. 控制器明确取值(可选)
    直接从JSON请求体中取值,兼容不同请求类型:

    $company->description = $request->json('description');
    

内容的提问来源于stack exchange,提问作者KatiaSisHost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:57:08