私のアプリケーションの応答の大部分は、ビューまたは JSON です。PSR-7ResponseInterface
で実装するオブジェクトにそれらを配置する方法がわかりません。
これが私が現在行っていることです:
// Views
header('Content-Type: text/html; charset=utf-8');
header('Content-Language: en-CA');
echo $twig->render('foo.html.twig', array(
'param' => 'value'
/* ... */
));
// JSON
header('Content-Type: application/json; charset=utf-8');
echo json_encode($foo);
これが私がPSR-7でやろうとしていることです:
// Views
$response = new Http\Response(200, array(
'Content-Type' => 'text/html; charset=utf-8',
'Content-Language' => 'en-CA'
));
// what to do here to put the Twig output in the response??
foreach ($response->getHeaders() as $k => $values) {
foreach ($values as $v) {
header(sprintf('%s: %s', $k, $v), false);
}
}
echo (string) $response->getBody();
そして、ヘッダーが異なるだけで、JSON 応答についても同様になると思います。私が理解しているように、メッセージ本文は でありStreamInterface
、で作成されたファイルリソースを出力しようとすると機能しますfopen
が、文字列でそれを行うにはどうすればよいですか?
アップデート
Http\Response
私のコードでは、実際にResponseInterface
は PSR-7 の私自身の実装です。現在 PHP 5.3 で立ち往生しているため、すべてのインターフェイスを実装しましたが、PHP < 5.4 と互換性のある実装が見つかりませんでした。のコンストラクタは次のHttp\Response
とおりです。
public function __construct($code = 200, array $headers = array()) {
if (!in_array($code, static::$validCodes, true)) {
throw new \InvalidArgumentException('Invalid HTTP status code');
}
parent::__construct($headers);
$this->code = $code;
}
出力をコンストラクター引数として受け入れるように実装を変更できます。代わりにwithBody
、実装のメソッドを使用することもできますMessageInterface
。どのように行うかに関係なく、問題は文字列をストリームに取得する方法です。