Anonymous
Как сделать многочастный запрос/запрос данных с помощью клиента браузера?
Сообщение
Anonymous » 07 янв 2025, 11:57
Код: Выделить всё
$data = [
'name' => 'Merry Christamas',
'description' => 'Merry Christamas',
'starts_at' => '2018-9-15 12:45:56',
'ends_at' => '2050-9-15 12:45:56',
'priority' => -1,
'coupon_based' => false,
'action' => [
'type' => 'order_fixed_discount',
'configuration' => [
'amount' => 100
]
],
'rules' => [
[
'type'=> 'item_total',
'configuration' => [
'amount' => 2500,
'base_amount' => 100,
]
]
]
];
$multipartStream = new MultipartStream($this->flatten($data)); //use GuzzleHttp\Psr7\MultipartStream;
Я использую следующий метод для преобразования ассоциативного массива в соответствии с потребностями MultipartStream.
Код: Выделить всё
protected function flatten(array $array, string $prefix = '', string $suffix = ''): array
{
$result = [];
foreach ($array as $key => $value) {
if (is_array($value)) {
$result = array_merge($result, $this->flatten($value, $prefix . $key . $suffix . '[', ']'));
} else {
if ($value instanceof UploadedFile) {
$result[] = [
'name' => $prefix . $key . $suffix,
'filename' => $value->getClientOriginalName(),
'Mime-Type' => $value->getClientMimeType(),
'contents' => file_get_contents($value->getPathname()),
];
} else {
$result[] = [
'name' => $prefix . $key . $suffix,
'contents' => $value,
];
}
}
}
return $result;
}
затем сделайте запрос с помощью клиента браузера
Код: Выделить всё
$this->client->request(
'POST',
'/api/admin/promotions',
[],
[],
[
'CONTENT_TYPE' => 'multipart/form-data; boundary=--'.$multipartStream->getBoundary() ,
'HTTP_Authorization'=> "blabla"
],
$multipartStream->getContents()
);
но запрос->request->all() пуст, как правильно выполнить запрос multipart/data с помощью клиент Symfony BrowserKit? Я много искал, но мне не удалось найти пример.
Подробнее здесь:
https://stackoverflow.com/questions/520 ... kit-client
1736240232
Anonymous
[code]$data = [ 'name' => 'Merry Christamas', 'description' => 'Merry Christamas', 'starts_at' => '2018-9-15 12:45:56', 'ends_at' => '2050-9-15 12:45:56', 'priority' => -1, 'coupon_based' => false, 'action' => [ 'type' => 'order_fixed_discount', 'configuration' => [ 'amount' => 100 ] ], 'rules' => [ [ 'type'=> 'item_total', 'configuration' => [ 'amount' => 2500, 'base_amount' => 100, ] ] ] ]; $multipartStream = new MultipartStream($this->flatten($data)); //use GuzzleHttp\Psr7\MultipartStream; [/code] Я использую следующий метод для преобразования ассоциативного массива в соответствии с потребностями MultipartStream. [code]protected function flatten(array $array, string $prefix = '', string $suffix = ''): array { $result = []; foreach ($array as $key => $value) { if (is_array($value)) { $result = array_merge($result, $this->flatten($value, $prefix . $key . $suffix . '[', ']')); } else { if ($value instanceof UploadedFile) { $result[] = [ 'name' => $prefix . $key . $suffix, 'filename' => $value->getClientOriginalName(), 'Mime-Type' => $value->getClientMimeType(), 'contents' => file_get_contents($value->getPathname()), ]; } else { $result[] = [ 'name' => $prefix . $key . $suffix, 'contents' => $value, ]; } } } return $result; } [/code] затем сделайте запрос с помощью клиента браузера [code]$this->client->request( 'POST', '/api/admin/promotions', [], [], [ 'CONTENT_TYPE' => 'multipart/form-data; boundary=--'.$multipartStream->getBoundary() , 'HTTP_Authorization'=> "blabla" ], $multipartStream->getContents() ); [/code] но запрос->request->all() пуст, как правильно выполнить запрос multipart/data с помощью клиент Symfony BrowserKit? Я много искал, но мне не удалось найти пример. Подробнее здесь: [url]https://stackoverflow.com/questions/52059549/how-to-make-a-multypart-data-request-with-browserkit-client[/url]