する質問をすることでしか得られない、回答やアドバイスがある。10前提・実現したいことSlimにてウェブアプリを書いています。Slimのミドルウェアにてレスポンスを書き換えたいです。}}試したこと他の人が作成したSlimのミドルウェアを見てみましたが、リクエストやレスポンスを書き換えているコードが無く困っています。3.4.1attachmentクリップ1気になる質問をクリップするクリップした質問は、後からいつでもマイページで確認できます。クリップした質問に回答があった際、通知やメールを受け取ることができます。自分も答えを知りたい質問者以外のユーザにも役立つ評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。質問の評価を上げたことを取り消します低評価-評価を下げられる数の上限に達しました評価を下げることができません1日5回まで評価を下げられます1日に1ユーザに対して2回まで評価を下げられます質問の評価を下げるteratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。コメントをしてください。送信する質問の評価を下げる機能の利用条件この機能を利用するためには、以下の事項を行う必要があります。件sort評価が高い順sort新着順sort古い順linkcheckベストアンサー+1こんな感じでしょうか。テストしてはいませんが、恐らく動くと思います。}}リクエストやレスポンスのbodyを取得するためにはgetBodyメソッドを使いますが、書き換える場合はwithBodyメソッドを使います。このメソッドの引数には、文字列ではなくStreamInterfaceのインスタンスを指定しなくてはなりません。SlimではこれをSlim\Http\Bodyクラスで提供しているため、このクラスを引数に指定すればbodyを書き換えられます。このSlim\Http\Bodyクラスも引数に文字列ではなくPHPのストリームを指定し、肝心のbodyはwriteメソッドで書き込む必要があるため、少々ややこしい事になっています。SlimのSlim/Handlers/NotFound.phpでは、レスポンスの書き換えをおこなうコードを以下のように実装しています。変数$outputに、レスポンスのbodyを上書きする文字列が格納されています。'r+')でストリームを生成してSlim\Http\Bodyクラスの引数に渡した後、writeメソッドで変数$outputの内容をbodyとして書き込んでいます。レスポンスのbodyの書き換えはこれをパクりました。$response->withBody($body);リクエストの場合も、withBodyメソッドを利用する点は変わりません。レスポンスの場合と同じコードで動作するハズです。...が、この回答では一応のため、Slimがリクエストのbodyを生成している内部処理と同じコードにしました。レスポンスのコードと異なるのは、fopen関数の第二引数の値です。'r+'から'w+'に変更しています。$request->withBody($body);(ストリームとして使うなら、r+もw+も変わらないと思いますが、ストリーム関係の動作にはあまり詳しくないので、確証を持って「r+もw+も同じだ」と言い切ることが出来ません...)なお、肝心なことですが、Slimが採用しているPSR-7のServerRequestInterfaceやResponseInterfaceは不変オブジェクトです。StreamInterface(getBodyメソッドで取得できるオブジェクト)を除き、メソッドを実行しただけではオブジェクトそのものの状態(オブジェクトの値)が変化せず、そのメソッドの返り値である「状態が変化したオブジェクト」を利用しなくてはなりません。このため、withBodyなどのメソッドが返す値のオブジェクトを次に渡す必要があります。このコードでは以下のように変数に再代入して次に渡しています。誤って再代入を忘れると、bodyが上書きされません。間違えてこうするとbodyが変わらない$response->withBody($body);詳細は以下をどうぞ。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。頂いたご意見への回答は行っておりません。