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

質問編集履歴

2

進捗状況

2019/05/19 06:33

投稿

toto654
toto654

スコア39

title CHANGED
File without changes
body CHANGED
@@ -138,4 +138,76 @@
138
138
  ### 問題点
139
139
  片方のフォームを送信する際に両方とものバリデーションが行われてしまう。
140
140
 
141
- これを独立した2つのフォームとして機能させたいです。
141
+ これを独立した2つのフォームとして機能させたいです。
142
+
143
+ ### 進捗状況
144
+ [こちらの記事](https://qiita.com/okoysm/items/fa3f091aac0eb9ac9dcc)を参考にフォームが複数(ボタンが複数)あった際の分岐処理の方法を参考にしました。
145
+
146
+ また、ボタンに値を付けて判断するのは[こちらの記事](https://teratail.com/questions/138594)を参照させて頂きました。
147
+
148
+
149
+ ```controller
150
+ public function change(Request $request)
151
+ {
152
+ //一つ目のフォームのボタンの値があったら
153
+ if (isset($request->btn_leader)) {
154
+ $this->leader($request);
155
+ //二つ目のフォームのボタンの値があったら
156
+ } elseif (isset($request->btn_member)) {
157
+ $this->member($request->add_member);
158
+ }
159
+ }
160
+
161
+ 一つ目のフォームの処理
162
+ public function leader(MyTeamMemberLeaderRequest $request)
163
+ {
164
+ //リーダー交代
165
+ $leader_id = $request->leader;
166
+ $leader = User::find($leader_id);
167
+ $leader->leader = 0;
168
+ $leader->save();
169
+ $user = Auth::user();
170
+ $user->leader = null;
171
+ $user->save();
172
+
173
+ return redirect('/myteam');
174
+ }
175
+ ```
176
+
177
+ 一つ目のフォームのボタンの値があった際に$this->leader();を呼び出す際に
178
+ ```leader
179
+ public function leader(Request $request)
180
+ {
181
+ //リーダー交代
182
+ $leader_id = $request->leader;
183
+ $leader = User::find($leader_id);
184
+ $leader->leader = 0;
185
+ $leader->save();
186
+ $user = Auth::user();
187
+ $user->leader = null;
188
+ $user->save();
189
+
190
+ return redirect('/myteam');
191
+ }
192
+ ```
193
+ このように引数にフォームリクエストを使用しないとエラーが出ませんが
194
+
195
+ ```leader
196
+ public function leader(MyTeamMemberLeaderRequest $request)
197
+ {
198
+ //リーダー交代
199
+ $leader_id = $request->leader;
200
+ $leader = User::find($leader_id);
201
+ $leader->leader = 0;
202
+ $leader->save();
203
+ $user = Auth::user();
204
+ $user->leader = null;
205
+ $user->save();
206
+
207
+ return redirect('/myteam');
208
+ }
209
+ ```
210
+
211
+ このようにフォームリクエストを使用すると![イメージ説明](5e3bf7848198b1500ae37597096e99a6.png)
212
+
213
+ このようなエラーが発生してしまいます。フォームリクエストを使用した際にもしっかりメソッドを使用出来るようにしたいです。

1

追記

2019/05/19 06:33

投稿

toto654
toto654

スコア39

title CHANGED
File without changes
body CHANGED
@@ -26,4 +26,116 @@
26
26
 
27
27
  2つのフォームを用意するのではなく、1つのふぉーむにまとめる方がいいのか。等どのような方法が良いのか知りたいです。
28
28
 
29
- ご教授のほどよろしくお願いします。
29
+ ご教授のほどよろしくお願いします。
30
+
31
+ ### 追記
32
+
33
+ ```laravel
34
+
35
+ <div class="check">
36
+ //一つ目のformです。
37
+ <form action="{{ route('routeMyTeamMember') }}" method="post">
38
+ @csrf
39
+ <div class="item-2">
40
+ <select name="leader" class="select">
41
+ <option class="option" value="0">選択しない</option>
42
+ @foreach($users as $user)
43
+ @if(!isset($user->leader))
44
+ <option value="{{ $user->id }}">{{ $user->user_name }}</option>
45
+ @endif
46
+ @endforeach
47
+ </select>
48
+ </div>
49
+ <div class="item-5">
50
+ <input type="submit" value="交代" class="btn">
51
+ </div>
52
+ </form>
53
+ </div>
54
+
55
+ <div class="member">
56
+ <div class="item-1">
57
+ <span class="name">メンバー</span>
58
+ </div>
59
+ @foreach($users as $user)
60
+ @if(!isset($user->leader))
61
+ <div class="item-2">
62
+ <span class="select">{{ $user->user_name }}</span>
63
+ <div class="delete">
64
+ <span class="btn btn2" onclick="event.preventDefault();
65
+ document.getElementById('leave{{ $user->id }}').submit();">脱退させる</span>
66
+ </div>
67
+ <form id="leave{{ $user->id }}" action="{{ route('routeMyTeamMember') }}" method="POST" style="display: none;">
68
+ @csrf
69
+ <input type="hidden" name="leave" value="{{ $user->id }}">
70
+ </form>
71
+ </div>
72
+ @endif
73
+ @endforeach
74
+ <div class="member-btn-box">
75
+ <span class="member-btn">メンバー招待</span>
76
+ </div>
77
+ </div>
78
+
79
+ @if($errors->has("add_member"))
80
+ <div class="error-pc">
81
+ <small class="small">※{{$errors->first("add_member")}}</small>
82
+ </div>
83
+ @endif
84
+ <div class="plus">
85
+ <div class="item-1">
86
+ @if($errors->has("add_member"))
87
+ <div class="error-mob">
88
+ <small class="small">※{{$errors->first("add_member")}}</small>
89
+ </div>
90
+ @endif
91
+ </div>
92
+ //二つ目のフォームです。
93
+ <form action="{{ route('routeMyTeamMember') }}" method="post">
94
+ @csrf
95
+ <div class="item-2">
96
+ <input type="text" class="select" name="add_member">
97
+ </div>
98
+ <div class="item-5">
99
+ <input type="submit" value="招待" class="btn">
100
+ </div>
101
+ </form>
102
+ </div>
103
+ ```
104
+
105
+ ```request
106
+ class MyTeamMemberRequest extends FormRequest
107
+ {
108
+ /**
109
+ * Determine if the user is authorized to make this request.
110
+ *
111
+ * @return bool
112
+ */
113
+ public function authorize()
114
+ {
115
+ return true;
116
+ }
117
+
118
+ /**
119
+ * Get the validation rules that apply to the request.
120
+ *
121
+ * @return array
122
+ */
123
+ public function rules()
124
+ {
125
+ return [
126
+ 'leader' => ['required', 'integer'],
127
+ 'add_member' => ["required", 'string', 'exists:users,user_name'],
128
+ ];
129
+ }
130
+ }
131
+ ```
132
+
133
+ 現在はコントローラーで
134
+ public function memberchange(MyTeamMemberRequest $request){}
135
+ と$requestを受け取る時にフォームリクエストが1つしか指定出来ないと思っているので、リクエストには2つのフォームのバリデーションをまとめて書いています。
136
+
137
+
138
+ ### 問題点
139
+ 片方のフォームを送信する際に両方とものバリデーションが行われてしまう。
140
+
141
+ これを独立した2つのフォームとして機能させたいです。