2016-05-17 115 views
0

我正在使用Yii2 REST api并使用Authorisation : Bearer进行身份验证。Yii2 rest api更新抛出objet转换错误

我有一个模型Event只有2行动CreateUpdate但我Update动作不工作的罚款,并抛出对象类转换错误。

我正在使用以下代码来查找混合条件的Event模型。

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的对象\模块\ V1 \型号\用户不能转换成字符串

我无法弄清楚,为什么它说我创建了User类的对象。

回答

1

问题出在您的andWhere(),您正在尝试分配partner_idobject即。 Yii::$app->user->identity,所以这是你的代码破坏的地方。不要使用json_encode时,你可以使用Yii中的响应格式Response::FORMAT_JSON,所以你的代码会是这样:

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 

     } 

    } 

} 
+0

谢谢你的时间,但那不是我目前的问题。 –

+1

我认为问题出现在你的'andWhere()'条件中。你已经使用了'Yii :: $ app-> user-> identity',其中'identity'是一个完整的对象,它有关于登录用户的数据。所以它应该像'Yii :: $ app-> user-> identity-> anyAttributeFromUserTable' –

+0

我认为这是问题,但随着更新行动我有'PUT'和'PATCH'请求的问题。我似乎没有通过'PUT'请求发送任何数据。 –

2
Yii::$app->user->identity 

是对象,你应该使用

Yii::$app->user->identity->id 

所以最后一行是:

$model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity->id]); 
1

问题在于:

andWhere(['partner_id'=> Yii::$app->user->identity])

您尝试用户对象(Yii::$app->user->identity)转换为字符串。相反,您需要使用用户的标识(Yii::$app->user->identity->id),它是一个字符串。