Cake2 ではコントローラアクション内で string
型を返すことも可能でしたが、Cake4 ではそのままだとエラーになってしまいます。
Cake4: エラー内容
error
error: [UnexpectedValueException] Controller actions can only return ResponseInterface instance or null. Got string instead.
訳: コントローラーのアクションは、ResponseInterface
インスタンスまたは null
のみを返すことができます。代わりに文字列を取得しました。
ということで、下記例です。
Cake2: コントローラー内でもstring型を返すことができていた
// クラスメソッド内 return 'hogefuga';
Cake2では上記のように単に文字列を返すことも可能でした。
Cake4: コントローラー内ではResponseInterfaceとして返す
return $this->response->withStringBody('hogefuga');
Cake4ではコントローラーのメソッド内ではレスポンスインターフェイスか、null
、何も返さない(void
)というルールがあるので、レスポンスオブジェクトの withStringBody()
で文字列をセットすることで対応できます。AJAX通信など、成功時に JSON形式でデータ返したりといった場合などに利用できると思います。
■ Cakephp4: withStringBody()
https://api.cakephp.org/4.4/class-Cake.Http.Response.html#withStringBody()