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

質問編集履歴

5

修正

2020/09/17 13:13

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- API Resourcesで「追加した値」と「ステータスコード」をレスポンスに含めたい
1
+ API Resourcesで「レコードに追加した値」と「ステータスコード」をレスポンスに含めたい
body CHANGED
@@ -1,151 +1,2 @@
1
1
  入力フォームから送信して「追加した値」と「レスポンスステータスコード」をレスポンスに含める方法を教えてください。
2
- レスポンスステータスコードは201とし、追加したレコードのみをレスポンスします。
2
+ レスポンスステータスコードは201とし、追加したレコードのみをレスポンスします。
3
- また、関数名も自信ありません。改善していただけるとありがたいです。
4
-
5
- Model
6
- ```PHP
7
- <?php
8
- namespace App\Models;
9
- use Illuminate\Database\Eloquent\Factories\HasFactory;
10
- use Illuminate\Database\Eloquent\Model;
11
- class Todo extends Model
12
- {
13
- use HasFactory;
14
- protected $fillable = ['body'];
15
- }
16
- ```
17
- Repository
18
- ```PHP
19
- <?php
20
- namespace App\Repositories;
21
- use App\Models\Todo;
22
- class TodoRepository
23
- {
24
- public function getList()
25
- {
26
- return Todo::orderBy('updated_at', 'desc')->get();
27
- }
28
-
29
- public function getTodo($id)
30
- {
31
- return Todo::find($id);
32
- }
33
-
34
- public function storeTodo($requestAll)
35
- {
36
- Todo::create($requestAll);
37
- }
38
- }
39
- ```
40
- Service
41
- ```PHP
42
- <?php
43
- namespace App\Services\API;
44
- use App\Repositories\TodoRepository;
45
- class TodoService
46
- {
47
- private $repository;
48
- public function __construct(TodoRepository $repository)
49
- {
50
- $this->repository = $repository;
51
- }
52
-
53
- public function getList()
54
- {
55
- return $this->repository->getList();
56
- }
57
-
58
- public function getTodo($id)
59
- {
60
- return $this->repository->getTodo($id);
61
- }
62
-
63
- public function storeTodo($requestAll)
64
- {
65
- $this->repository->storeTodo($requestAll);
66
- }
67
- }
68
- ```
69
- Controller
70
- ```PHP
71
- <?php
72
- namespace App\Http\Controllers\API;
73
- use Illuminate\Http\Request;
74
- use App\Http\Requests\TodoRequest;
75
- use App\Services\API\TodoService;
76
- use App\Http\Resources\TodoCollection;
77
- use App\Http\Resources\Todo as TodoResource;
78
- class TodoController
79
- {
80
- private $service;
81
- public function __construct(TodoService $service)
82
- {
83
- $this->service = $service;
84
- }
85
-
86
- public function getList()
87
- {
88
- return new TodoCollection($this->service->getList());
89
- }
90
-
91
- public function getTodo($id)
92
- {
93
- return new TodoResource($this->service->getTodo($id));
94
- }
95
-
96
- public function storeTodo(TodoRequest $request)
97
- {
98
- $this->service->storeTodo($request->all());
99
- /* $responseBody = $this->service->getList(); これだと全てのデータが返ってきてしまします。
100
- return response($responseBody, 201);     追加したレコードのみをレスポンスしたいです。
101
-                              Eloquent API Resources を使う必要があります。
102
- */
103
- }
104
- }
105
- ```
106
- Resources
107
- ```PHP
108
- <?php
109
- namespace App\Http\Resources;
110
- use Illuminate\Http\Resources\Json\JsonResource;
111
- class Todo extends JsonResource
112
- {
113
- public function toArray($request)
114
- {
115
- return [
116
- 'id' => $this->id,
117
- 'body' => $this->body,
118
- 'created_at' => $this->created_at,
119
- 'updated_at' => $this->updated_at,
120
- ];
121
- }
122
- }
123
- ```
124
- ResourceCollection
125
- ```PHP
126
- <?php
127
- namespace App\Http\Resources;
128
- use Illuminate\Http\Resources\Json\ResourceCollection;
129
- class TodoCollection extends ResourceCollection
130
- {
131
- public function toArray($request)
132
- {
133
- return [
134
- 'data' => $this->collection,
135
- 'links' => [
136
- 'url' => $request->url()
137
- ]
138
- ];
139
- }
140
- }
141
- ```
142
- api.php
143
- ```PHP
144
- <?php
145
- use Illuminate\Http\Request;
146
- use Illuminate\Support\Facades\Route;
147
- use App\Http\Controllers\API\TodoController;
148
- Route::get('/todo', [TodoController::class, 'getList']);
149
- Route::get('/todo/{id}', [TodoController::class, 'getTodo']);
150
- Route::post('/todo', [TodoController::class, 'storeTodo']);
151
- ```

4

文章の修正

2020/09/17 13:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,5 @@
1
- LaravelでTODOリストのapiを作成しています。
2
- 入力フォームから送信して追加した値レスポンスステータスコードと共にレスポンスに含める方法を教えてください。
1
+ 入力フォームから送信して追加した値」と「レスポンスステータスコード」をレスポンスに含める方法を教えてください。
3
- レスポンスステータスコードは201とし、追加したレコードのみを返す必要があります。
2
+ レスポンスステータスコードは201とし、追加したレコードのみをレスポンスします。
4
3
  また、関数名も自信ありません。改善していただけるとありがたいです。
5
4
 
6
5
  Model

3

タイトル修正

2020/09/17 13:02

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- 追加した値をAPI Resourcesを用てJSONで返却する方法等を教えてください
1
+ API Resourcesで「追加した値」と「ステータスコード」レスポンスに含めた
body CHANGED
File without changes

2

文章の修正

2020/09/17 12:59

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,11 +1,8 @@
1
1
  LaravelでTODOリストのapiを作成しています。
2
2
  入力フォームから送信して追加した値をレスポンスステータスコードと共にレスポンスに含める方法を教えてください。
3
3
  レスポンスステータスコードは201とし、追加したレコードのみを返す必要があります。
4
-
5
4
  また、関数名も自信ありません。改善していただけるとありがたいです。
6
5
 
7
- その他、おかしな点、改善したほうが良いと思われる点がありましたら、ご指導よろしくお願い致します。
8
-
9
6
  Model
10
7
  ```PHP
11
8
  <?php

1

誤字

2020/09/17 12:25

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -39,16 +39,6 @@
39
39
  {
40
40
  Todo::create($requestAll);
41
41
  }
42
-
43
- public function updateTodo($requestAll, $id)
44
- {
45
- Todo::find($id)->update($requestAll);
46
- }
47
-
48
- public function destroyTodo($id)
49
- {
50
- Todo::find($id)->delete();
51
- }
52
42
  }
53
43
  ```
54
44
  Service