CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
2025/01/31
CakePHPでJSONレスポンスの処理において 4系と 3系の違いについて解説
CakePHPで JSON形式のレスポンスを実行する処理について解説します。
記事の主眼は CakePHP3から CakePHP4に移行する際の差異についてになります。
例えば、CakePHPで APIの処理を構築する場合、プログラムで処理を行って、レスポンスを JSON形式で行う場合の処理になります。
CakePHP3と CakePHP4とでは結構処理が変わっていますので、レスポンスを返す処理を中心に解説します。
参考 Cookbook リクエストとレスポンスオブジェクト ボディーの設定
https://book.cakephp.org/4/ja/controllers/request-response.html#id21
CakePHP 3系と 4系それぞれの JSONレスポンス処理
3系:body 4系:withStringBody
|
1 2 3 4 5 |
// CakePHP3系 $response->body(json_encode($data)); // CakePHP4系 return $response->withType('application/json')->withStringBody(json_encode($data)); |
CakePHP3系(正確には CakePHP 3.3以前)では「$response->body()」だけですが、CakePHP4系では「withType」で JSON形式であることを指定し、「withStringBody」で送信するデータを指定します。
その際、データは「json_encode()」でエンコードしたものを指定します。
ちなみに、それ以前の処理によっては「$response」が「$this->response」の場合もあるのではないかと思います。
CakePHP4系では Returnがないとレスポンスを実行しない
また、CakePHP3では「$response->body()」だけでレスポンスまで実行されていました。
ですが、CakePHP4では「return $this->response->withType()->withStringBody();」のように、最初に「return」を付ける必要があります。
「return」を実行しないと値を返さないためです。
layoutや templateを使用しない場合の記述方法が変更になっている
また、今回は JSONで値を返す処理ですが、JSONで値を返すのは APIの処理を構築しているのではないか、と思います。
その場合は、layoutや templateを使用しない場合が多々あるのではないかと思いますが、layoutや templateを使用しない場合の記述方法も CakePHP4では変更になっています。
|
1 2 3 4 5 6 |
// CakePHP3系 $this->render(false,false); // CakePHP4系 $this->autoRender = false; $this->layout = false; |
CakePHP3のころは、layoutと templateをまとめて指定する方法がありましたが、CakePHP4ではそれができなくなっているようです。
詳細は下記に記事を書いていますので、併せて参考にしてください。
「CakePHP3のcontroller内でテンプレート、レイアウトを変更する際の指定方法」
「CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法」
initializeの定義の行でも違いがある
その他、細かなところで下記のような違いもあります。
initializeの定義の行でも違いがあります。
|
1 2 3 4 5 |
// CakePHP3系 public function initialize() { // CakePHP4系 public function initialize(): void { |
GETで送信された値を受け取る処理も異なる
GETで送信されてきた値を取得する処理も異なります。
|
1 2 3 4 5 |
// CakePHP3系 $key = $this->request->query('key'); // CakePHP4系 $key = $this->request->getQuery('key'); |
CakePHP 3系と 4系それぞれの JSONレスポンス処理のまとめ
CakePHP3もバージョンによって仕様が違いますので、単純に CakePHP3系と CakePHP4系との違いと言えない仕様もありますが、CakePHP3系からの CakePHP4系への移行の場合は、それぞれの違いを理解しつつ、冷静に一つずつ修正していく必要がありますね。
一つの記事を読んで、そこに書いてあるサンプルをまねて書き替えて、動かないのでまた別のページを探して、ということではなく、一つのサンプルを書き換えたところで、ほぼできているのに、他にも変更する必要がある個所が修正されていないので、求めている結果にならない...という場合も多々あるのではないかと思います。
CakePHP4の関連記事
CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
その他の「CakePHP4」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP4、CakePHP5のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP4の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。
-
-
CakePHP4の定数定義ファイルを環境変数によって本番と開発を振り分ける方法解説
CakePHP4で開発環境と本番環境とで違う設定ファイルを読み込ませて環境ごとに定数を切り替える方法を解説。Apacheのhttpd.confに環境変数を設定しそれを読み込み判別する。
-
-
CakePHP3でDocumentRootやwebroot、imgフォルダのURLやドメイン、パスを取得
URLやドメイン、フォルダへのパスの取得は、ビューではUrlHelperを使い、コントローラーではRouterクラスを使います。第2引数の指定でURLを取得することも可能。
-
-
CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法
CakePHP4、CakePHP5でクリエビルダーを利用してテーブルからレコードを取得する際、asを使用してカラムの別名で値を取得したい場合の対応方法を解説。また、別名にはハイフンやアスタリスクなど使用できない文字がある点も解説。
-
-
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
CakePHP5のヘルパーで他のヘルパーを読み込む方法を解説。公式の日本語CookbookはCakePHP4のソースのままで間違っているため注意が必要。CakePHP4からの移行の際も同じ点に注意が必要。
-
-
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングをする方法を解説。インストール方法、読み込み方法。および、具体的なスクレイピングを実行するサンプルソースも。
-
-
CakePHPを学ぶ際にはオブジェクト指向を学ぼう
CakePHPはオブジェクト指向で書かれていますので、CakePHPを学ぶにはオブジェクト指向も学びましょう。
-
-
CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法
CakePHP4系、5系ではAuthenticationを使用してログイン認証を行う。その認証でID、PASS以外の削除フラグなどの条件を加えたいときの対応方法について解説。
-
-
CakePHP 2.3でOn Duplicate Key構文を実装
CakePHPで On Duplicate Key構文を Queryを利用して実装する方法をサンプルソース付きで解説します。
-
-
CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で queryを使って日付の範囲検索の方法です。