Ich versuche, auf eine hochgeladene Datei in der History-Middleware für Guzzle (v6) zuzugreifen.Guzzle: Greifen Sie auf hochgeladene Dateien in der History-Middleware zu
Mein tatsächlicher Code empfängt eine Anfrage (also verwendet die ServerRequestInterface
), dann verwendet Guzzle, um die Anfrage an anderer Stelle zu senden.
Ich versuche, hochgeladene Dateien zu testen, die diese Ebene durchlaufen, aber ich kann nicht scheinen, auf sie in dem Request-Objekt zuzugreifen, das von Guzzle Middleware zurückgegeben wird.
Beispielcode:
<?php
use GuzzleHttp\Client;
use GuzzleHttp\Handler\MockHandler;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Middleware;
use GuzzleHttp\Psr7\ServerRequest;
use GuzzleHttp\Psr7\UploadedFile;
class DoNotCommitTest extends \PHPUnit\Framework\TestCase
{
public function testUploads()
{
$request = new ServerRequest('GET', 'http://example.com/bla');
$file = new UploadedFile('test', 100, \UPLOAD_ERR_OK);
$request = $request->withUploadedFiles([$file]);
$this->assertCount(1, $request->getUploadedFiles());
// Mock Guzzle request, assert on the request it 'sent'
$mock = new MockHandler([
function (ServerRequest $request, array $options) {
// This fails...
$this->assertCount(1, $request->getUploadedFiles());
}
]);
$historyContainer = [];
$history = Middleware::history($historyContainer);
$handler = HandlerStack::create($mock);
$handler->push($history);
$client = new Client(['handler' => $handler]);
$client->send($request);
}
}
Danke. Ich war einige Tage weg und wollte gerade ein Problem lösen. Ich stimme zu, dass es ein Fehler in Guzzles PSR7-Bibliothek ist, obwohl ich befürchtete, dass ich es falsch benutze. Ich werde dies als die akzeptierte Antwort markieren, und Sie verdienen definitiv das Kopfgeld. – giggsey