Правильное форматирование запроса post в формате JSON и нескольких частей

#laravel #post #laravel-5 #guzzle

#laravel #Публикация #laravel-5 #заполнение

Вопрос:

У меня есть два разных запроса Guzzle post, которые я пытаюсь объединить (исключительно потому, что они в основном выполняют объединенную работу и должны выполняться вместе).

Изначально у меня есть данные о моих пожертвованиях:

 'donation' => [
       'web_id' => $donation->web_id,
       'amount' => $donation->amount,
       'type' => $donation->type,
       'date' => $donation->date->format('Y-m-d'),
       'collection_id' => NULL,
       'status_id' => $donation->status_id,
 ],
  

И затем у меня есть мои файлы, которые идут с ним, которые в основном представляют собой два разных PDF-файла, которые включены или отключены для доноров, иногда у них есть оба. Я знаю, что составная часть будет выглядеть примерно так, как показано ниже, но я не уверен.

                 foreach ($uploadDocs as $doc) {
                        'multipart' => [
                            [
                                'name'     => 'donation_id',
                                'contents' => $donation->web_id,
                            ],
                            [
                                'name'     => 'type_id',
                                'contents' => $doc->type_id',
                            ],
                            [
                                'name'     => 'file',
                                'contents' => fopen($doc->path, 'r'),
                                'headers'  => ['Content-Type' => 'application/pdf'],
                            ],
                        ],
                }
  

Поскольку я обычно обрабатываю только один файл за раз, и я не уверен, как объединить первый блок кода со вторым для соответствующего запроса Guzzle post.

Ответ №1:

Вы можете попробовать это:

 $donationData = [
    'web_id' => $donation->web_id,
    'amount' => $donation->amount,
    'type' => $donation->type,
    'date' => $donation->date->format('Y-m-d'),
    'collection_id' => NULL,
    'status_id' => $donation->status_id,
];

$multipart = [];

foreach ($uploadDocs as $doc) {
    $multipart[] = [
        [
            'name'     => 'donation_id',
            'contents' => $donation->web_id,
        ],
        [
            'name'     => 'type_id',
            'contents' => $doc->type_id,
        ],
        [
            'name'     => 'file',
            'contents' => fopen($doc->path, 'r'),
            'headers'  => ['Content-Type' => 'application/pdf'],
        ],
    ];
}
  

Чем выполнить ваш запрос:

 $r = $client->request('POST', 'http://example.com', [
    'body' => $donationData,
    'multipart' => $multipart,
]);
  

Комментарии:

1. Я провел ваш тест, но появилась синтаксическая ошибка, связанная с заключительной скобкой для multipart [] и запятой после нее (и прямо перед конечной фигурной скобкой), в которой говорится, что запятая была неожиданной. Я попытался просто удалить его, но затем возникла проблема с фигурной скобкой в конце. Для пояснения я также исправил апостроф после $doc-> type_id.

2. «Я провел ваш тест, но появилась синтаксическая ошибка, указывающая на скобку в конце» — я скопировал ваш код, хотя ваш тоже может не работать 🙂 В любом случае, я внес правку