как сделать multypart / запрос данных с клиентом browserkit? - PullRequest
0 голосов
/ 28 августа 2018
$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;
    }

затем сделайте запрос с клиентом browserkit

$this->client->request(
            'POST',
            '/api/admin/promotions',
            [],
            [],
            [
                'CONTENT_TYPE' => 'multipart/form-data; boundary=--'.$multipartStream->getBoundary() ,
                'HTTP_Authorization'=> "blabla"
            ],
            $multipartStream->getContents()
        );

но request->request->all() пусто, как правильно сделать запрос multipart/data с клиентом symfony browserkit? Я много искал, но не повезло найти пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...