回答編集履歴

1

修正・追記

2016/08/03 11:55

投稿

coba-coba
coba-coba

スコア1409

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