web-dev-qa-db-fra.com

Guzzle ~ 6.0 multipart et form_params

J'essaie de télécharger un fichier et d'envoyer des paramètres de publication en même temps comme ceci:

$response = $client->post('http://example.com/api', [
    'form_params' => [
        'name' => 'Example name',
    ],
    'multipart' => [
        [
            'name'     => 'image',
            'contents' => fopen('/path/to/image', 'r')
        ]
    ]
]);

Cependant, mes champs form_params sont ignorés et seuls les champs en plusieurs parties sont présents dans mon corps de message. Puis-je envoyer les deux avec guzzle 6.0?

12
Jordan Dobrev

J'ai rencontré le même problème. Vous devez ajouter vos form_params au tableau multipart . Où "nom" est le nom de l'élément de formulaire et "contenu" est la valeur. L'exemple de code que vous avez fourni deviendrait:

$response = $client->post('http://example.com/api', [
    'multipart' => [
        [
            'name'     => 'image',
            'contents' => fopen('/path/to/image', 'r')
        ],
        [
            'name'     => 'name',
            'contents' => 'Example name'
        ]
    ]
]);
27
Simon Crowfoot

J'y suis aussi arrivé, mais malheureusement cela ne fonctionne pas si vous avez un tableau de paramètres multidimensionnel. La seule façon de le faire fonctionner est si vous envoyez les paramètres form_paramaters en tant que paramètres de requête dans le tableau:

$response = $client->post('http://example.com/api', [
    'query' => [
        'name' => 'Example name',
    ],
    'multipart' => [
        [
            'name'     => 'image',
            'contents' => fopen('/path/to/image', 'r')
        ]
    ]
]);
3
Jordan Dobrev