yii2 rest — использование PUT для обновления данных

#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.