3

ドキュメントに従ってSilexでアプリを作成していますが、いくつか追加しています。ルートのミドルウェアの後にルートを宣言し、アプリのミドルウェアを終了します。

$app->put('/request/', function (Request $request) use ($app) {
    // ... some code here ...

    return $app->json(['requestId' => $requestId], 201);
})->bind('create_request')
->after(function(Request $request, Response $response) {
    $contentLength = mb_strlen($response->getContent(), 'utf-8');
    $response->headers->set('Content-length', $contentLength, true);
    $response->headers->set('Connection', 'close', true);
});

$app->finish(function (Request $request, Response $response, Application $app) {
    flush();

    // ... generate big pdf file, attach it to email and send via swiftmailer ...
});

上記のコードは必要に応じて機能します。応答が送信され、ブラウザのスピナーが停止し、負荷の高い操作がバックグラウンドで処理されます。しかし、未解決の問題があります。ミドルウェアの後に応答にヘッダーを追加し、ミドルウェアの終了時にバッファーをフラッシュする必要がありますか? これらの操作がない場合、サーバーの応答は、終了ミドルウェア ハンドラーの完了後にのみ受信されます。

4

1 に答える 1

1

必要だと思います。応答が準備されたが送信されなかったときに呼び出されるイベントです
->after(RESPONSEあなたの場合、ブラウザが応答を受信したときに接続を閉じるために必要なすべてのヘッダーが追加されます。応答が送信された後に呼び出されるイベントです
->finish(。- 以前はサーバー バッファからブラウザへの応答をフラッシュしていたと思います。TERMINATEflush()

于 2016-06-04T18:47:40.507 に答える