2016-05-17 83 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),它是一個字符串。