【问题标题】:Yii2 rest api update throws object conversion errorYii2 rest api update 抛出对象转换错误
【发布时间】:2016-05-17 06:45:37
【问题描述】:

我正在使用Yii2 REST api 并使用Authorisation : Bearer 进行身份验证。

我有一个模型 Event,只有 2 个动作 CreateUpdate,但我的 Updateaction 无法正常工作并引发对象类转换错误。

我正在使用以下代码来查找具有混合条件的 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\modules\v1\models\User 的对象无法转换为字符串

我不明白为什么它说我创建了User 类的对象。

【问题讨论】:

    标签: php yii2 yii2-advanced-app yii2-basic-app yii-rest


    【解决方案1】:
    Yii::$app->user->identity
    

    是你应该使用的对象

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

    所以最后一行是:

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

    【讨论】:

      【解决方案2】:

      问题在于您的andWhere(),您正在尝试分配partner_id 一个object 即。 Yii::$app->user->identity,所以这是你的代码被破坏的地方。并且当你可以使用 Yii 的响应格式Response::FORMAT_JSON 时不要使用json_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
      
              }
      
          }
      
      }
      

      【讨论】:

      • 感谢您抽出宝贵时间,但目前这不是我的问题。
      • 我认为问题出在您的andWhere() 条件下。您已经使用了Yii::$app->user->identity,其中identity 是一个完整的对象,其中包含有关登录用户的数据。所以应该是Yii::$app->user->identity->anyAttributeFromUserTable
      • 我认为这是问题所在,但对于更新操作,我遇到了 PUTPATCH 请求的问题。我似乎没有收到通过PUT 请求发送的任何数据。
      • 你不应该使用$_REQUEST,因为你$_REQUEST只返回GETPOSTCOOKIE数据。因为您使用的是PUTPATCH 请求,所以我假设您使用JSON 作为请求正文,所以您应该使用`\Yii::$app->request->rawBody`。
      【解决方案3】:

      问题就在这里:

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

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

      【讨论】:

        猜你喜欢
        • 2016-07-17
        • 2019-05-21
        • 2021-06-21
        • 1970-01-01
        • 2015-11-07
        • 2018-08-31
        • 2018-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多