回答編集履歴
1
文章表現を修正
test
CHANGED
@@ -118,7 +118,7 @@
|
|
118
118
|
|
119
119
|
Slimの[Slim/Handlers/NotFound.php](https://github.com/slimphp/Slim/blob/3.x/Slim/Handlers/NotFound.php#L54-L59)では、レスポンスの書き換えをおこなうコードを以下のように実装しています。
|
120
120
|
|
121
|
-
変数`$output`に、
|
121
|
+
変数`$output`に、レスポンスのbodyを上書きする文字列が格納されています。
|
122
122
|
|
123
123
|
|
124
124
|
|
@@ -138,11 +138,11 @@
|
|
138
138
|
|
139
139
|
|
140
140
|
|
141
|
-
このコードを簡単に説明すると、`fopen('php://temp', 'r+')`でストリームを生成して`Body`クラスの引数に渡した後、
|
141
|
+
このコードを簡単に説明すると、`fopen('php://temp', 'r+')`でストリームを生成して`Slim\Http\Body`クラスの引数に渡した後、
|
142
142
|
|
143
143
|
`write`メソッドで変数`$output`の内容をbodyとして書き込んでいます。
|
144
144
|
|
145
|
-
レスポンスの書き換えはこれをパクりました。
|
145
|
+
レスポンスのbodyの書き換えはこれをパクりました。
|
146
146
|
|
147
147
|
|
148
148
|
|
@@ -186,7 +186,7 @@
|
|
186
186
|
|
187
187
|
|
188
188
|
|
189
|
-
(ストリームとして使うなら、`r+`も`w+`も変わらないと思いますが
|
189
|
+
(ストリームとして使うなら、`r+`も`w+`も変わらないと思いますが、ストリーム関係の動作にはあまり詳しくないので、確証を持って「`r+`も`w+`も同じだ」と言い切ることが出来ません…)
|
190
190
|
|
191
191
|
|
192
192
|
|
@@ -196,13 +196,15 @@
|
|
196
196
|
|
197
197
|
なお、肝心なことですが、Slimが採用している[PSR-7](http://www.php-fig.org/psr/psr-7/)の`ServerRequestInterface`や`ResponseInterface`は不変オブジェクトです。
|
198
198
|
|
199
|
-
`StreamInterface`を除き、メソッドを実行しただけではオブジェクトそのものの
|
199
|
+
`StreamInterface`(`getBody`メソッドで取得できるオブジェクト)を除き、メソッドを実行しただけではオブジェクトそのものの状態(オブジェクトの値)が変化せず、そのメソッドの返り値である「状態が変化したオブジェクト」を利用しなくてはなりません。
|
200
200
|
|
201
201
|
|
202
202
|
|
203
203
|
このため、`withBody`などのメソッドが返す値のオブジェクトを次に渡す必要があります。
|
204
204
|
|
205
|
+
このコードでは以下のように変数に再代入して次に渡しています。
|
206
|
+
|
205
|
-
|
207
|
+
誤って再代入を忘れると、**bodyが上書きされません**。
|
206
208
|
|
207
209
|
|
208
210
|
|