我正在使用Yii2 REST api
并使用Authorisation : Bearer
进行身份验证。
我有一个模型Event
,只有2个操作Create
和Update
,但我的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 \ modules \ v1 \ models \ User的对象无法转换为字符串
我无法弄清楚为什么它说我创建了User
类的对象。
答案 0 :(得分: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 :(得分:1)
问题在于您的andWhere()
,您试图分配partner_id
object
即。{ Yii::$app->user->identity
,所以这就是您的代码破解的地方。当您可以使用Yii的响应格式json_encode
时,请不要使用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
}
}
}
答案 2 :(得分:1)
问题在于:
andWhere(['partner_id'=> Yii::$app->user->identity])
您正在尝试将用户对象(Yii::$app->user->identity
)转换为字符串。相反,您需要使用用户的ID(Yii::$app->user->identity->id
),这是一个字符串。