#yii2 #yii2-basic-app #yii2-api
#yii2 #yii2-basic-app #yii2-api
Вопрос:
Я использую REST API, в Yii2 with Authorization Bearer
котором я полностью настроил actionUpdate, но каким-то образом при использовании PUT для обновления данных я получаю нулевое значение при попытке получить данные post,
print_r($request->getBodyParam('member_id'))
Получите результат ниже, когда print_r(Yii::$app->request->bodyParams):
Content -type is multipart/form-data
Массив ( [——WebKitFormBoundaryAF3YWAApi5BxYUb2 Расположение содержимого:_form-data;_name] => «member_id» 274505 —— WebKitFormBoundaryAF3YWAApi5BxYUb2 Расположение содержимого: форма-данные; имя= «claim_type» 3 —— WebKitFormBoundaryAF3YWAApi5BxYUb2 Расположение содержимого: форма-данные; имя=»visit_date» 2016-10-12 —— WebKitFormBoundaryAF3YWAApi5BxYUb2 Расположение содержимого: форма-данные; имя= «provider_id» 0 —— WebKitFormBoundaryAF3YWAApi5BxYUb2 Содержимое-Диспозиция: форма-данные; имя = «диагноз» лихорадка ——WebKitFormBoundaryAF3YWAApi5BxYUb2 Содержимое-диспозиция: form-data; name=»возмещение» 1 —— WebKitFormBoundaryAF3YWAApi5BxYUb2 Расположение содержимого: форма-данные; имя = «non_panel» true ——WebKitFormBoundaryAF3YWAApi5BxYUb2 Расположение содержимого: форма-данные; имя = «provider_name» клиника abc ——WebKitFormBoundaryAF3YWAApi5BxYUb2 Содержимое-Расположение: форма-данные; имя = «возмещение причин» рядом с домом ——WebKitFormBoundaryAF3YWAApi5BxYUb2 Содержимое-Расположение: форма-данные; имя =»invoice_no» 1245 —— WebKitFormBoundaryAF3YWAApi5BxYUb2 Расположение содержимого: форма-данные; имя=»medical_leave» 0 ——WebKitFormBoundaryAF3YWAApi5BxYUb2 Содержимое-Расположение: форма-данные; имя=»оставить форму» ——WebKitFormBoundaryAF3YWAApi5BxYUb2 Содержимое-Расположение: форма-данные; имя=»amount_incurrent» 24 —— WebKitFormBoundaryAF3YWAApi5BxYUb2— )
Ниже приведен мой actionUpdate
public function actionUpdate($id) {
$claim = $this->findModel($id);
$claim->scenario = 'update';
if ( $claim->status_id == 1 ) {
$request = Yii::$app->request;
if (isset($request)) {
$member_id = $request->getBodyParam('member_id');
$claim_type = $request->getBodyParam('claim_type');
$visit_date = $request->getBodyParam('visit_date');
$provider_id = $request->getBodyParam('provider_id');
$diagnosis = $request->getBodyParam('diagnosis');
$reimbursement = $request->getBodyParam('reimbursement');
$userlogin_id = Yii::$app->user->identity->id;
if ($claim->validate() ) {
$claim->save();
return array('id'=>$claim->id,'msg'=>'Successfully update claim');
} else {
return (ActiveForm::validate($claim));
}
}
} else {
throw new yiiwebMethodNotAllowedHttpException('You are not allowed to update data');
}
}
Комментарии:
1. Чтобы обработать тело запроса PUT / DELETE как данные, закодированные в форме url, вы можете прочитать php://input и проанализировать его с помощью parse_str . Смотрите, например lornajane.net/posts/2008/accessing-incoming-put-data-from-php .
2. Это работает, если я использую body в качестве данных, закодированных в форме url, но я хочу использовать multipart / form-data, потому что мне нужно загрузить некоторые файлы — @Refilon
3. Я считаю, что загрузка файла вместе с данными формы (т.Е. Состоящего из нескольких частей) не допускается при использовании PUT, только для POST. Ознакомьтесь со спецификациями для HTTP.