メインメニュー
XAMPP アレンジ
IED
WSL2
-
道具箱
リポジトリ編
フレームワーク編
公開ソフトウェア
メタ
リンク
- PHP ライブラリ
- PHP 言語
slim:4:response目次
Slim4 レスポンス
Version 4.5.0
— y2sunlight 2020-09-23
関連記事
- Slim4 レスポンス
本章は以下のサイトの The Response のセクションを翻訳し若干の補足を加えたのもです。
Slimアプリのルート(route)とミドルウェアには、クライアントに返される現在のHTTPレスポンスを表すPSR-7レスポンスオブジェクトが与えられます。レスポンスオブジェクトは、HTTPレスポンスステータス、ヘッダー、およびボディを検査および操作できる PSR-7 ResponseInterface を実装します。
Responseオブジェクトを取得する方法
PSR-7レスポンスオブジェクトは、次のようにルート(route)コールバックの2番目の引数としてSlimアプリケーションルートに注入されます。
<?php use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Slim\Factory\AppFactory; require __DIR__ . '/../vendor/autoload.php'; $app = AppFactory::create(); $app->get('/hello', function (ServerRequest $request, Response $response) { $response->getBody()->write('Hello World'); return $response; }); $app->run();
レスポンスステータス
すべてのHTTPレスポンスには、数値のステータスコードがあります。ステータスコード は、クライアントに返されるHTTPレスポンスのタイプを識別します。PSR-7レスポンスオブジェクトのデフォルトのステータスコードは
200
(OK) です。以下のようにgetStatusCode()
メソッドを使用して、PSR-7 Responseオブジェクトのステータスコードを取得できます。$status = $response->getStatusCode();
PSR-7レスポンスオブジェクトをコピーして、次のような新しいステータスコードを割り当てることができます:
$newResponse = $response->withStatus(302);
レスポンスヘッダー
全てのHTTPレスポンスにはヘッダーがあります。これらはHTTPレスポンスを説明するメタデータで、レスポンスのボディには表示されません。PSR-7 レスポンスオブジェクトは、そのヘッダーを検査および操作するためのいくつかのメソッドを提供します。
全てのヘッダーを取得する
PSR-7 レスポンスオブジェクトの
getHeaders()
メソッドを使用して、すべてのHTTPレスポンスヘッダーを連想配列としてフェッチできます。結果として得られる連想配列のキーはヘッダー名であり、その値自体がそれぞれのヘッダー名の文字列値の数値配列です。$headers = $response->getHeaders(); foreach ($headers as $name => $values) { echo $name . ": " . implode(", ", $values); }
1つのヘッダーを取得する
PSR-7レスポンスオブジェクトの
getHeader($name)
メソッドを使用して、単一のヘッダーの値を取得できます。これにより、指定されたヘッダー名の値の配列が返されます。1つのHTTPヘッダーには複数の値が含まれる場合があることに注意してください。$headerValueArray = $response->getHeader('Vary');
PSR-7 レスポンスオブジェクトの
getHeaderLine($name)
メソッドを使用して、特定のヘッダーのすべての値を含むコンマ区切りの文字列をフェッチすることもできます。getHeader($name)
メソッドとは異なり、このメソッドはコンマで区切られた文字列を返します。$headerValueString = $response->getHeaderLine('Vary');
ヘッダーを検出する
PSR-7 レスポンスオブジェクトの
hasHeader($name)
メソッドを使用して、ヘッダーの存在をテストできます。if ($response->hasHeader('Vary')) { // Do something }
ヘッダーをセットする
PSR-7 レスポンスオブジェクトの
withHeader($name, $value)
メソッドを使用してヘッダー値を設定できます。$newResponse = $oldResponse->withHeader('Content-type', 'application/json');
注意
Responseオブジェクトは不変です。このメソッドは、新しいヘッダー値を持つResponseオブジェクトのコピーを返します。このメソッドは破壊的であり、同じヘッダー名にすでに関連付けられている既存のヘッダー値を置き換えます。
ヘッダーを追加する
PSR-7 Responseオブジェクトの
withAddedHeader($name、$value)
メソッドを使用してヘッダー値を追加できます。$newResponse = $oldResponse->withAddedHeader('Allow', 'PUT');
注意
withHeader() メソッドとは異なり、このメソッドは、同じヘッダー名として既に存在する値のセットに新しい値を追加します。Response オブジェクトは不変です。このメソッドは、ヘッダー値が追加されたResponseオブジェクトのコピーを返します。
ヘッダーを削除する
Responseオブジェクトの
withoutHeader($name)
メソッドを使用してヘッダーを削除できます。$newResponse = $oldResponse->withoutHeader('Allow');
リマインダー
Responseオブジェクトは不変です。 このメソッドは、ヘッダー値を削除したResponseオブジェクトのコピーを返します。
レスポンスボディ
HTTPレスポンスには通常、ボディがあります。
PSR-7 Requestオブジェクトと同様に、PSR-7 Responseオブジェクトはボディを
Psr\Http\Message\StreamInterface
のインスタンスとして実装します。PSR-7 ResponseオブジェクトのgetBody()
メソッドを使用して、HTTPレスポンスボディのStreamInterface
インスタンスを取得できます。getBody()
メソッドは、発信HTTPレスポンスの長さが不明であるか、使用可能なメモリに対して大きすぎる場合に適しています。$body = $response->getBody();
結果として得られる
Psr\Http\Message\StreamInterface
インスタンスは、基礎となるPHPのresource
からの読み取り、反復、および書き込みを行うための次のメソッドを提供します。- getSize()
- tell()
- eof()
- isSeekable()
- seek()
- rewind()
- isWritable()
- write($string)
- isReadable()
- read($length)
- getContents()
- getMetadata($key = null)
ほとんどの場合、PSR-7 Responseオブジェクトには書き込む必要があります。次のように、
write()
メソッドを使用してStreamInterface
インスタンスにコンテンツを書き込むことができます:$body = $response->getBody(); $body->write('Hello');
PSR-7 Responseオブジェクトのボディをまったく新しい
StreamInterface
インスタンスに置き換えることもできます。これは、コンテンツをリモートの宛先(例えば、ファイルシステムやリモートAPIなど)からHTTPレスポンスにパイプ処理する場合に特に便利です。PSR-7 Responseオブジェクトのボディを
withBody(StreamInterface $body)
メソッドを使って置き換えることができます。 その引数は、Psr\Http\Message\StreamInterface
のインスタンスでなければなりません(MUST
)。use GuzzleHttp\Psr7\LazyOpenStream; $newStream = new LazyOpenStream('/path/to/file', 'r'); $newResponse = $oldResponse->withBody($newStream);
注意
Responseオブジェクトは不変です。このメソッドは、新しい本文を含むResponseオブジェクトのコピーを返します。
JSONを返す
最も単純な形式では、JSONデータはデフォルトの 200 HTTPステータスコードを使用して返すことができます。
$data = array('name' => 'Bob', 'age' => 40); $payload = json_encode($data); $response->getBody()->write($payload); return $response ->withHeader('Content-Type', 'application/json');
カスタムHTTPステータスコードを使用してJSONデータを返すこともできます。
$data = array('name' => 'Rob', 'age' => 40); $payload = json_encode($data); $response->getBody()->write($payload); return $response ->withHeader('Content-Type', 'application/json') ->withStatus(201);
The Response object is immutable. This method returns a copy of the Response object that has a new Content-Type header. This method is destructive, and it replaces the existing Content-Type header.注意
Responseオブジェクトは不変です。このメソッドは、新しいContent-Typeヘッダーを持つResponseオブジェクトのコピーを返します。このメソッドは破壊的であり、既存のContent-Typeヘッダーを置き換えます。
リダイレクトを返す
Locationヘッダーを使用して、HTTPクライアントをリダイレクトできます。
return $response ->withHeader('Location', 'https://www.example.com') ->withStatus(302);
slim/4/response.txt · 最終更新: 2020/10/07 21:20 by y2sunlight
コメント