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

回答編集履歴

1

質問への回答

2020/09/03 04:25

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,88 @@
1
1
  **config/routes.php**で`json`の拡張子を有効にした後、リクエストURLを`.json`形式にしてPOSTしてみて下さい。
2
2
 
3
- - [ルーティング - 3.9](https://book.cakephp.org/3/ja/development/routing.html#index-5)
3
+ - [ルーティング - 3.9](https://book.cakephp.org/3/ja/development/routing.html#index-5)
4
+
5
+ ### 2020.09.03 追記
6
+
7
+ > すみません、jsonファイルを送るのではなく、<script></script>内で生成したjsonデータを送りたいです。
8
+ 紛らわしい書き方をしてしまい、申し訳ございません。
9
+
10
+ 上記の方法はjsonファイルではなくjsonデータを送信する方法です。サンプルコードを以下抜粋して記載します。[プロジェクト全体のコードはこちらからご確認ください。](https://github.com/KazmaArakaki/Teratail/tree/289129)
11
+
12
+ **config/routes.php**
13
+
14
+ ```php
15
+ $routes->prefix('Api', function (RouteBuilder $builder) {
16
+ $builder->setExtensions(['json']);
17
+
18
+ $builder->fallbacks(DashedRoute::class);
19
+ });
20
+ ```
21
+
22
+ **templates/Pages/home.php**
23
+
24
+ ```php
25
+ <script>
26
+ window.addEventListener("DOMContentLoaded", async (event) => {
27
+ const response = await fetch("<?= $this->Url->build([
28
+ 'prefix' => 'Api',
29
+ 'controller' => 'Users',
30
+ 'action' => 'create',
31
+ '_ext' => 'json',
32
+ ]) ?>", {
33
+ method: "post",
34
+ headers: {
35
+ "Content-Type": "application/json",
36
+ "X-CSRF-TOKEN": "<?= $this->request->getCookie('csrfToken') ?>",
37
+ },
38
+ body: JSON.stringify({
39
+ name: "John Doe",
40
+ }),
41
+ });
42
+
43
+ const responseData = await response.json();
44
+
45
+ console.log({ responseData });
46
+ });
47
+ </script>
48
+ ```
49
+
50
+ **src/Controller/Api/UsersController.php**
51
+
52
+ ```php
53
+ <?php
54
+ declare(strict_types=1);
55
+
56
+ namespace App\Controller\Api;
57
+
58
+ use Cake\Log\Log;
59
+
60
+ class UsersController extends ApiController {
61
+ public function create() {
62
+ Log::debug(var_export([
63
+ 'request_data' => $this->request->getData(),
64
+ ], true));
65
+
66
+ $success = true;
67
+
68
+ $this->set(compact([
69
+ 'success',
70
+ ]));
71
+
72
+ $this->set('_serialize', [
73
+ 'success',
74
+ ]);
75
+ }
76
+ }
77
+ ```
78
+
79
+ **UsersController::createのログ出力**
80
+
81
+ ```plain
82
+ 2020-09-03 04:09:39 Debug: array (
83
+ 'request_data' =>
84
+ array (
85
+ 'name' => 'John Doe',
86
+ ),
87
+ )
88
+ ```