質問編集履歴

2

進捗状況

2019/05/19 06:33

投稿

toto654
toto654

スコア39

test CHANGED
File without changes
test CHANGED
@@ -279,3 +279,147 @@
279
279
 
280
280
 
281
281
  これを独立した2つのフォームとして機能させたいです。
282
+
283
+
284
+
285
+ ### 進捗状況
286
+
287
+ [こちらの記事](https://qiita.com/okoysm/items/fa3f091aac0eb9ac9dcc)を参考にフォームが複数(ボタンが複数)あった際の分岐処理の方法を参考にしました。
288
+
289
+
290
+
291
+ また、ボタンに値を付けて判断するのは[こちらの記事](https://teratail.com/questions/138594)を参照させて頂きました。
292
+
293
+
294
+
295
+
296
+
297
+ ```controller
298
+
299
+ public function change(Request $request)
300
+
301
+ {
302
+
303
+ //一つ目のフォームのボタンの値があったら
304
+
305
+ if (isset($request->btn_leader)) {
306
+
307
+ $this->leader($request);
308
+
309
+ //二つ目のフォームのボタンの値があったら
310
+
311
+ } elseif (isset($request->btn_member)) {
312
+
313
+ $this->member($request->add_member);
314
+
315
+ }
316
+
317
+ }
318
+
319
+
320
+
321
+ 一つ目のフォームの処理
322
+
323
+ public function leader(MyTeamMemberLeaderRequest $request)
324
+
325
+ {
326
+
327
+ //リーダー交代
328
+
329
+ $leader_id = $request->leader;
330
+
331
+ $leader = User::find($leader_id);
332
+
333
+ $leader->leader = 0;
334
+
335
+ $leader->save();
336
+
337
+ $user = Auth::user();
338
+
339
+ $user->leader = null;
340
+
341
+ $user->save();
342
+
343
+
344
+
345
+ return redirect('/myteam');
346
+
347
+ }
348
+
349
+ ```
350
+
351
+
352
+
353
+ 一つ目のフォームのボタンの値があった際に$this->leader();を呼び出す際に
354
+
355
+ ```leader
356
+
357
+ public function leader(Request $request)
358
+
359
+ {
360
+
361
+ //リーダー交代
362
+
363
+ $leader_id = $request->leader;
364
+
365
+ $leader = User::find($leader_id);
366
+
367
+ $leader->leader = 0;
368
+
369
+ $leader->save();
370
+
371
+ $user = Auth::user();
372
+
373
+ $user->leader = null;
374
+
375
+ $user->save();
376
+
377
+
378
+
379
+ return redirect('/myteam');
380
+
381
+ }
382
+
383
+ ```
384
+
385
+ このように引数にフォームリクエストを使用しないとエラーが出ませんが
386
+
387
+
388
+
389
+ ```leader
390
+
391
+ public function leader(MyTeamMemberLeaderRequest $request)
392
+
393
+ {
394
+
395
+ //リーダー交代
396
+
397
+ $leader_id = $request->leader;
398
+
399
+ $leader = User::find($leader_id);
400
+
401
+ $leader->leader = 0;
402
+
403
+ $leader->save();
404
+
405
+ $user = Auth::user();
406
+
407
+ $user->leader = null;
408
+
409
+ $user->save();
410
+
411
+
412
+
413
+ return redirect('/myteam');
414
+
415
+ }
416
+
417
+ ```
418
+
419
+
420
+
421
+ このようにフォームリクエストを使用すると![イメージ説明](5e3bf7848198b1500ae37597096e99a6.png)
422
+
423
+
424
+
425
+ このようなエラーが発生してしまいます。フォームリクエストを使用した際にもしっかりメソッドを使用出来るようにしたいです。

1

追記

2019/05/19 06:33

投稿

toto654
toto654

スコア39

test CHANGED
File without changes
test CHANGED
@@ -55,3 +55,227 @@
55
55
 
56
56
 
57
57
  ご教授のほどよろしくお願いします。
58
+
59
+
60
+
61
+ ### 追記
62
+
63
+
64
+
65
+ ```laravel
66
+
67
+
68
+
69
+ <div class="check">
70
+
71
+ //一つ目のformです。
72
+
73
+ <form action="{{ route('routeMyTeamMember') }}" method="post">
74
+
75
+ @csrf
76
+
77
+ <div class="item-2">
78
+
79
+ <select name="leader" class="select">
80
+
81
+ <option class="option" value="0">選択しない</option>
82
+
83
+ @foreach($users as $user)
84
+
85
+ @if(!isset($user->leader))
86
+
87
+ <option value="{{ $user->id }}">{{ $user->user_name }}</option>
88
+
89
+ @endif
90
+
91
+ @endforeach
92
+
93
+ </select>
94
+
95
+ </div>
96
+
97
+ <div class="item-5">
98
+
99
+ <input type="submit" value="交代" class="btn">
100
+
101
+ </div>
102
+
103
+ </form>
104
+
105
+ </div>
106
+
107
+
108
+
109
+ <div class="member">
110
+
111
+ <div class="item-1">
112
+
113
+ <span class="name">メンバー</span>
114
+
115
+ </div>
116
+
117
+ @foreach($users as $user)
118
+
119
+ @if(!isset($user->leader))
120
+
121
+ <div class="item-2">
122
+
123
+ <span class="select">{{ $user->user_name }}</span>
124
+
125
+ <div class="delete">
126
+
127
+ <span class="btn btn2" onclick="event.preventDefault();
128
+
129
+ document.getElementById('leave{{ $user->id }}').submit();">脱退させる</span>
130
+
131
+ </div>
132
+
133
+ <form id="leave{{ $user->id }}" action="{{ route('routeMyTeamMember') }}" method="POST" style="display: none;">
134
+
135
+ @csrf
136
+
137
+ <input type="hidden" name="leave" value="{{ $user->id }}">
138
+
139
+ </form>
140
+
141
+ </div>
142
+
143
+ @endif
144
+
145
+ @endforeach
146
+
147
+ <div class="member-btn-box">
148
+
149
+ <span class="member-btn">メンバー招待</span>
150
+
151
+ </div>
152
+
153
+ </div>
154
+
155
+
156
+
157
+ @if($errors->has("add_member"))
158
+
159
+ <div class="error-pc">
160
+
161
+ <small class="small">※{{$errors->first("add_member")}}</small>
162
+
163
+ </div>
164
+
165
+ @endif
166
+
167
+ <div class="plus">
168
+
169
+ <div class="item-1">
170
+
171
+ @if($errors->has("add_member"))
172
+
173
+ <div class="error-mob">
174
+
175
+ <small class="small">※{{$errors->first("add_member")}}</small>
176
+
177
+ </div>
178
+
179
+ @endif
180
+
181
+ </div>
182
+
183
+ //二つ目のフォームです。
184
+
185
+ <form action="{{ route('routeMyTeamMember') }}" method="post">
186
+
187
+ @csrf
188
+
189
+ <div class="item-2">
190
+
191
+ <input type="text" class="select" name="add_member">
192
+
193
+ </div>
194
+
195
+ <div class="item-5">
196
+
197
+ <input type="submit" value="招待" class="btn">
198
+
199
+ </div>
200
+
201
+ </form>
202
+
203
+ </div>
204
+
205
+ ```
206
+
207
+
208
+
209
+ ```request
210
+
211
+ class MyTeamMemberRequest extends FormRequest
212
+
213
+ {
214
+
215
+ /**
216
+
217
+ * Determine if the user is authorized to make this request.
218
+
219
+ *
220
+
221
+ * @return bool
222
+
223
+ */
224
+
225
+ public function authorize()
226
+
227
+ {
228
+
229
+ return true;
230
+
231
+ }
232
+
233
+
234
+
235
+ /**
236
+
237
+ * Get the validation rules that apply to the request.
238
+
239
+ *
240
+
241
+ * @return array
242
+
243
+ */
244
+
245
+ public function rules()
246
+
247
+ {
248
+
249
+ return [
250
+
251
+ 'leader' => ['required', 'integer'],
252
+
253
+ 'add_member' => ["required", 'string', 'exists:users,user_name'],
254
+
255
+ ];
256
+
257
+ }
258
+
259
+ }
260
+
261
+ ```
262
+
263
+
264
+
265
+ 現在はコントローラーで
266
+
267
+ public function memberchange(MyTeamMemberRequest $request){}
268
+
269
+ と$requestを受け取る時にフォームリクエストが1つしか指定出来ないと思っているので、リクエストには2つのフォームのバリデーションをまとめて書いています。
270
+
271
+
272
+
273
+
274
+
275
+ ### 問題点
276
+
277
+ 片方のフォームを送信する際に両方とものバリデーションが行われてしまう。
278
+
279
+
280
+
281
+ これを独立した2つのフォームとして機能させたいです。