我试图使用 Postman 发送请求来更新数据库中的字段。但是,我一直遇到以下错误:
{ "status": "error", "message": "请求方法无效或无效 数据提交。”}.
首先,我检查了我的 Postman 设置以确保
Content-Type
标头设置为 application/json
。我还检查了我的请求类型是 Post
并且我正在发送 RAW JSON 数据。
其次,我更改了函数以使用以下代码读取原始 JSON 数据:
$data = \Yii::$app->request->getBodyParams();
但是它不起作用,我仍然犯同样的错误。我尝试通过添加代码来调试
\Yii::debug($model->getDirtyAttributes(), 'dirtyAttributes');
\Yii::debug($model->attributes, 'attributesAfterLoad');
这也没有帮助,因为发送原始 JSON 数据会使全局
$_POST
数组为空。我还在终端中收到以下消息:
[2024 年 9 月 30 日星期一 12:52:26] [::1]:52291 已关闭,未发送 请求;这可能只是一个未使用的推测预连接。
这是我的方法:
public function actionUpdate($id)
{
$model = $this->findModel($id);
if (\Yii::$app->request->isPut) {
$data = \Yii::$app->request->getBodyParams();
if ($model->load($data, '') && $model->save()) {
return [
'status' => 'success',
'message' => 'Model updated successfully.',
'data' => $model,
];
} else {
return [
'status' => 'error',
'message' => 'Failed to update the model.',
'errors' => $model->errors,
];
}
}
return [
'status' => 'error',
'message' => 'Invalid request method or invalid data submission.',
];
}
答案是我必须将这些行添加到我的 config/web.php 中:
'components' => [
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
你也可以查看官方文档Class yii\web\JsonParser