CakePHP3.4で非推奨になったResponse::body()をResponse::withBody()に書き換えるときにややハマった

CakePHP3.4で非推奨になったResponse::body()をResponse::withBody()に書き換えるときにややハマった




非推奨を教えてくれるPhpStorm

PhpStormというエディタを使い始めて1年ちょっとになるんですが、ほんとに優秀です。CakePHP3でシステム構築している際にも、非推奨のメソッドを教えてくれたりします。CakePHP4系に変わった時に、スムーズに移行できるように非推奨なやり方はできるだけ減らしておきたいですからね。

↑こんな感じで、bodyメソッドが非推奨(deprecated)なのを教えてくれます。

非推奨メソッドは積極的に書き替えて行ってるんですが、ちょっとだけハマったので共有しておきます。

 

Response::body()をResponse::withBody()に単純に置き換えてもうまく動かない

先ほどの画像の所がまさにそうなんですが、Response::body()をResponse::withBody()に置き換えたかったんです。で、素直に

$this->response->body($response_html);

$this->response->withBody($response_html);

 

とやったんですが、うまくいきません。以下のようなエラーが出てしまいました。

 

Warning (4096): Argument 1 passed to Cake\Http\Response::withBody() must implement interface Psr\Http\Message\StreamInterface, string given

 

ネットで調べてみたら、本家Githubで同じことにハマっていた先人の質問と回答を発見。

https://github.com/cakephp/cakephp/issues/10290

 

どうやらwithBody()の引数はStreamInterface型じゃなきゃいけないみたいです。ゴニョゴニョ書くこともできますがシンプルな書き換えは以下の感じです。

 

答え

$this->response->body($response_html);

$this->response->getBody()->write($response_html);

 

CakePHP3開発のボス的存在である markstory がこれでいいってコメントしてるので、たぶんOKでしょう。同じところにハマってる方のお役に立てれば幸いです。

 

>> CakePHP3.4への移行ガイド(日本語)はコチラ

 

 

最後まで読んでいただき、ありがとうございます。




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です