Php Yii2 rest api更新引发对象转换错误
我正在使用Php Yii2 rest api更新引发对象转换错误,php,yii2,yii2-advanced-app,yii2-basic-app,yii-rest,Php,Yii2,Yii2 Advanced App,Yii2 Basic App,Yii Rest,我正在使用yii2restapi并使用授权:承载人进行身份验证 我有一个模型事件,只有两个操作创建和更新,但我的更新操作工作不正常,并抛出对象类转换错误 我使用以下代码查找具有混合条件的事件模型 public function actionUpdate($id) { $params=$_REQUEST; /*Following line throws error */ $model = Event::find()->where(['event_id'=>$id
yii2restapi
并使用授权:承载人
进行身份验证
我有一个模型事件
,只有两个操作创建
和更新
,但我的更新
操作工作不正常,并抛出对象类转换错误
我使用以下代码查找具有混合条件的事件模型
public function actionUpdate($id)
{
$params=$_REQUEST;
/*Following line throws error */
$model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity]);
if($model !== null){
$model->attributes=$params;
$model->partner_id = Yii::$app->user->id;
$model->updated_date = time();
if ($model->save()) {
$this->setHeader(200);
echo json_encode(array('status'=>1,'data'=>array_filter($model->attributes)),JSON_PRETTY_PRINT);
}
}
}
错误是这样的
类api\modules\v1\models\User的对象无法转换为字符串
我不明白为什么它说我创建了用户
类的对象。问题在于您的和where()
,您正试图分配合作伙伴id
一个对象
<代码>Yii::$app->user->identity
,这就是你的代码被破坏的地方。如果可以使用Yii的响应格式response::format\u json
,则不要使用json\u encode
,因此您的代码如下所示:
public function actionUpdate($id)
{
\Yii::$app->response->format = yii\web\Response::FORMAT_JSON; // formatting response in json format
$params= json_decode(\Yii::$app->request->rawBody, 1);
/*Following line throws error */
$model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity->id]);
if($model !== null){
$model->attributes=$params;
$model->partner_id = Yii::$app->user->id;
$model->updated_date = time();
if ($model->save()) {
$this->setHeader(200);
return array('status'=>1,'data'=> $model); // you can simply use $model
}
}
}
问题在于您的和where()
,您正试图分配合作伙伴id
一个对象
viz<代码>Yii::$app->user->identity
,这就是你的代码被破坏的地方。如果可以使用Yii的响应格式response::format\u json
,则不要使用json\u encode
,因此您的代码如下所示:
public function actionUpdate($id)
{
\Yii::$app->response->format = yii\web\Response::FORMAT_JSON; // formatting response in json format
$params= json_decode(\Yii::$app->request->rawBody, 1);
/*Following line throws error */
$model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity->id]);
if($model !== null){
$model->attributes=$params;
$model->partner_id = Yii::$app->user->id;
$model->updated_date = time();
if ($model->save()) {
$this->setHeader(200);
return array('status'=>1,'data'=> $model); // you can simply use $model
}
}
}
您应该使用什么对象
Yii::$app->user->identity->id
最后一行是:
$model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity->id]);
您应该使用什么对象
Yii::$app->user->identity->id
最后一行是:
$model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity->id]);
问题在于:
andWhere(['partner\u id'=>Yii::$app->user->identity])
您正在尝试将用户对象(Yii::$app->user->identity
)转换为字符串。相反,您需要使用用户的id(Yii::$app->user->identity->id
),这是一个字符串。问题在于:
andWhere(['partner\u id'=>Yii::$app->user->identity])
您正在尝试将用户对象(
Yii::$app->user->identity
)转换为字符串。相反,您需要使用用户id(Yii::$app->user->identity->id
),这是一个字符串。谢谢您的时间,但这不是我目前的问题。我认为问题在于您的和where()
条件。您已经使用了Yii::$app->user->identity
,其中identity
是一个完整的对象,其中包含有关登录用户的数据。所以它应该像Yii::$app->user->identity->anyAttributeFromUserTable
我想这就是问题所在,但是对于更新操作,我对PUT
和PATCH
请求有问题。我似乎没有收到任何通过PUT
请求发送的数据。您不应该使用$\u request
,因为$\u request
只返回get
,POST
,COOKIE
数据。因为您使用的是PUT
或PATCH
请求,我假设您使用的是JSON
作为请求主体,所以您应该使用“\Yii::$app->request->rawBody”。谢谢您的时间,但这不是我目前的问题。我认为问题在于您的和where()
条件。您已经使用了Yii::$app->user->identity
,其中identity
是一个完整的对象,其中包含有关登录用户的数据。所以它应该像Yii::$app->user->identity->anyAttributeFromUserTable
我想这就是问题所在,但是对于更新操作,我对PUT
和PATCH
请求有问题。我似乎没有收到任何通过PUT
请求发送的数据。您不应该使用$\u request
,因为$\u request
只返回get
,POST
,COOKIE
数据。因为您使用的是PUT
或PATCH
请求,我假设您使用的是JSON
作为请求主体,所以您应该使用“\Yii::$app->request->rawBody”。