teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

修正・追記

2016/08/03 11:55

投稿

coba-coba
coba-coba

スコア1409

answer CHANGED
@@ -1,9 +1,21 @@
1
- returnではなくechoを使います。
1
+ 単純に出力したい場合は、returnではなくechoを使います。
2
2
 
3
3
  ```PHP
4
- // Controller
4
+ // コントローラー
5
5
  echo json_encode($texts);
6
6
  ```
7
7
 
8
+ もしくはCakePHP3の機能を使ってjsonを返すことができます。
9
+ ```PHP
10
+ // コントローラー
11
+ $this->set('texts', $texts);
8
- もしビューのテンプレートが必要な場合は、YuyaKoshimizuさんのおっしゃる通り$this->setで変数を渡します。
12
+ $this->set('_serialize', ['texts']);
13
+ ```
14
+ この場合$this->autoRender = false;は必要ありません。
15
+ またechoで出力するときと違いtextsという階層が1つ増えます。
16
+
17
+ 表示を確認したい場合は、$this->viewBuilder()->className('Json');を加えると、URLで直接アクセスしたときにjsonを確認することができます。
18
+ ($this->viewClass = 'Json';はバージョン3.1.0でDeprecated)
19
+
20
+ なお、質問文中のroutes.phpでjsonを指定するのは、~~/hoge.jsonという形でアクセス(取得)することができるようにするためです。
9
- ただ、今回は非同期通信で検索候補表示するだけなので、echoでいいいま
21
+ routes.php設定せずに~~/hogeアクセスしても構いません