Guzzle(v6)の履歴ミドルウェアでアップロードしたファイルにアクセスしようとしています。Guzzle:履歴ミドルウェアでアップロードしたファイルにアクセスする
私の実際のコードはリクエストを受け取り(したがってServerRequestInterface
を使用しています)、Guzzleを使用してリクエストを他の場所に送ります。
このレイヤーを経由してアップロードされたファイルをテストしようとしていますが、Guzzleのミドルウェアから返されたRequestオブジェクトにアクセスできないようです。
例のコードは:あなたはいくつかの時点で実行チェーン、$client->send($request)
に従っている場合
<?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);
}
}
ありがとうございました。私は数日間離れていて、ちょうど今問題を開こうとしていました。 GuzzleのPSR7ライブラリのバグに見えることに同意しますが、私は間違って使っていると心配していました。私はこれを受け入れられた答えとしてマークし、あなたは確かに恩恵に値します。 – giggsey