Yii2 rest api update выдает ошибку преобразования объекта

Я работаю с 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 учебный класс.

0

Решение

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так вот где твой код ломается. И не использовать 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

}

}

}
1

Вопрос здесь:

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

Вы пытаетесь преобразовать объект пользователя (Yii::$app->user->identity) в строку. Вместо этого вам нужно использовать идентификатор пользователя (Yii::$app->user->identity->id) который является строкой.

1
По вопросам рекламы [email protected]