Я работаю с 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
учебный класс.
Yii::$app->user->identity
это объект, который вы должны использовать
Yii::$app->user->identity->id
итоговая строка будет:
$model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity->id]);
Проблема с вашим 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
}
}
}
Вопрос здесь:
andWhere(['partner_id'=> Yii::$app->user->identity])
Вы пытаетесь преобразовать объект пользователя (Yii::$app->user->identity
) в строку. Вместо этого вам нужно использовать идентификатор пользователя (Yii::$app->user->identity->id
) который является строкой.