В моем приложении @ vue / cli 4.0.5 я сохраняю данные своего профиля в виде массива профиля:
axios.put(this.apiUrl + '/personal/profile/' + this.userProfileRow.id, {
profile: {
first_name: this.userProfileRow.first_name,
last_name: this.userProfileRow.last_name,
phone: this.userProfileRow.phone,
website: this.userProfileRow.website
},
}, this.credentialsConfig).then((/*response*/) => {
и в консоли браузера вижу запрос PUT с массивом
profile: {first_name: "a", last_name: "b", phone: "c", website: "d"}
Теперь я делаю описание в swagger с версией api 3 как:
/personal/profile/{user_id}:
put:
tags:
- profile
summary: personal profile update editable fields
responses:
'200':
description: Successful update
'400':
description: Invalid profile editable fields updating
operationId: updateProfileEditableFieldsByBearerToken
parameters:
- name: user_id
in: path
description: The user_id update editable fields.
required: true
schema:
type: integer
default: 1
example: 1
requestBody:
description: Editable fields
required: true
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
profile:
type: array
items:
$ref: '#/components/schemas/ProfileEditableFields'
required:
- profile
components:
schemas:
ProfileEditableFields:
properties:
first_name:
type: string
last_name:
type: string
phone:
type: string
website:
type: string
Но я не могу заполнить ProfileEditableFields, в моей консоли у меня есть: https://prnt.sc/rugv28 1) Я не знаете, какой формат является допустимым для любого параметра ProfileEditableFields? С указанными выше полями данных был сгенерирован следующий запрос curl:
curl -X PUT "http://myserver.com/api/personal/profile/1" -H "accept: */*" -H "Authorization: Bearer TOKEN" -H "Content-Type: application/x-www-form-urlencoded" -d "profile=first_name%20%3A%20111%0A%2Clast_name%20%3A%20222%0A%2Cphone%3A%20333333%2Cwebsite%3A%204444444"
Но с кодом 200 все поля first_name, last_name ... были очищены в дБ, как если бы были отправлены пустые значения (API разрешает пустые поля) .
2) Как установить некоторые данные по умолчанию для любых элементов структуры ProfileEditableFields?
МОДИФИЦИРОВАННЫЙ БЛОК:
В приложении / Http / Controllers /API/PersonalController.php conrtoller моего бэкэнд-приложения Я добавил логин в методе обновления:
public function update(Request $request, $id)
{
$loggedUser = Auth::guard('api')->user();
\Log::info('PersonalController update $this->requestData::');
\Log::info(print_r( $this->requestData, true ));
$loggedUser->first_name = !empty($this->requestData['profile']['first_name']) ? $this->requestData['profile']['first_name'] : '';
и при обновлении профиля из моего приложения client @ vue / cli 4.0.5 я вижу логирование как:
2020-04-13 03:28:10] local.INFO: PersonalController update $this->requestData:: [2020-04-13 03:28:10] local.INFO: Array ( [profile] => Array ( [first_name] => John [last_name] => Glads [phone] => 252-129-0916 [website] => JohnGlads@select-task.site.com ) )
Но когда я запускаю метод update из swagger, я не вижу ни одной строки журнала обновлений, как указано выше, но вижу ответ 200 в swagger: https://prnt.sc/ry6con и в запросе: https://prnt.sc/ry6drl Я предполагаю, что у меня неверный параметр профиля, но я не понимаю, почему?
Спасибо!