cakephp3.6でjson response(type,body)部分でエラー

この記事は最新更新日から、6年以上経過しています。

作業環境

cakephp3.6
centos6.9
apache2.4
mysql5.6
php7.1

概要

ローカルから本番環境にデータを移したところ、jsonレスポンスしている部分でこういうエラーが出ていてよく解消方法がわからなくて困っていた。
——-

Deprecated: Response::type() is deprecated. Use getType() or withType() instead. – /var/www/cakephp3/project/src/Controller/SitesController.php, line: 362
You can disable deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED` in your config/app.php. in /var/www/cakephp3/project/vendor/cakephp/cakephp/src/Core/functions.php on line 312

Deprecated: Response::body() is deprecated. Mutable response methods are deprecated. Use `withBody()` and `getBody()` instead. – /var/www/cakephp3/project/src/Controller/SitesController.php, line: 387
You can disable deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED` in your config/app.php. in /var/www/cakephp3/project/vendor/cakephp/cakephp/src/Core/functions.php on line 312

——-

やったこと

エラー部分のソースはざっくりこんなかんじだった。getとbodyがだめらしい。
ローカル環境だと動いてたのにな・・・。

SitesController.phpの部分

$this->response->type( 'json' );
$this->response->body( json_encode(['Foo' => 'bar']) );

https://book.cakephp.org/3.0/ja/controllers/request-response.html
を読んで下記のように変更したところエラーが解消した。

return $this->response->withType('application/json')->withStringBody($json);

controller部分はreturnじゃないとレスポンスに反映されないんだろうか…。
公式資料読めるようになろう…。

おわり。