分からないこと
一つのページに2つフォームがそれぞれあり(<form></form> <form></form>),互いに独立してます。
片方のフォームを送信した際に、片方のフォームのバリデーションが機能しないようにしたいです。
また、フォームを送信時、片方のフォームの値だけを取得したい時にどのような方法が良いのか知りたいです。
html
1<body> 2<form> 3 4... 5 6</form> 7 8<form> 9 10... 11 12</form> 13 14</body>
知りたいこと
①2つのフォームがあった時に、postをした際に片方だけのフォームを送ることが可能なのか。その方法を知りたいです。
②2つのフォームがあった時に、postをした際に片方だけにバリデーションを行うことが可能なのか。その方法を知りたいです。
2つのフォームを用意するのではなく、1つのふぉーむにまとめる方がいいのか。等どのような方法が良いのか知りたいです。
ご教授のほどよろしくお願いします。
追記
laravel
1 2<div class="check"> 3//一つ目のformです。 4 <form action="{{ route('routeMyTeamMember') }}" method="post"> 5 @csrf 6 <div class="item-2"> 7 <select name="leader" class="select"> 8 <option class="option" value="0">選択しない</option> 9 @foreach($users as $user) 10 @if(!isset($user->leader)) 11 <option value="{{ $user->id }}">{{ $user->user_name }}</option> 12 @endif 13 @endforeach 14 </select> 15 </div> 16 <div class="item-5"> 17 <input type="submit" value="交代" class="btn"> 18 </div> 19 </form> 20 </div> 21 22 <div class="member"> 23 <div class="item-1"> 24 <span class="name">メンバー</span> 25 </div> 26 @foreach($users as $user) 27 @if(!isset($user->leader)) 28 <div class="item-2"> 29 <span class="select">{{ $user->user_name }}</span> 30 <div class="delete"> 31 <span class="btn btn2" onclick="event.preventDefault(); 32 document.getElementById('leave{{ $user->id }}').submit();">脱退させる</span> 33 </div> 34 <form id="leave{{ $user->id }}" action="{{ route('routeMyTeamMember') }}" method="POST" style="display: none;"> 35 @csrf 36 <input type="hidden" name="leave" value="{{ $user->id }}"> 37 </form> 38 </div> 39 @endif 40 @endforeach 41 <div class="member-btn-box"> 42 <span class="member-btn">メンバー招待</span> 43 </div> 44 </div> 45 46 @if($errors->has("add_member")) 47 <div class="error-pc"> 48 <small class="small">※{{$errors->first("add_member")}}</small> 49 </div> 50 @endif 51 <div class="plus"> 52 <div class="item-1"> 53 @if($errors->has("add_member")) 54 <div class="error-mob"> 55 <small class="small">※{{$errors->first("add_member")}}</small> 56 </div> 57 @endif 58 </div> 59//二つ目のフォームです。 60 <form action="{{ route('routeMyTeamMember') }}" method="post"> 61 @csrf 62 <div class="item-2"> 63 <input type="text" class="select" name="add_member"> 64 </div> 65 <div class="item-5"> 66 <input type="submit" value="招待" class="btn"> 67 </div> 68 </form> 69 </div>
request
1class MyTeamMemberRequest extends FormRequest 2{ 3 /** 4 * Determine if the user is authorized to make this request. 5 * 6 * @return bool 7 */ 8 public function authorize() 9 { 10 return true; 11 } 12 13 /** 14 * Get the validation rules that apply to the request. 15 * 16 * @return array 17 */ 18 public function rules() 19 { 20 return [ 21 'leader' => ['required', 'integer'], 22 'add_member' => ["required", 'string', 'exists:users,user_name'], 23 ]; 24 } 25}
現在はコントローラーで
public function memberchange(MyTeamMemberRequest $request){}
と$requestを受け取る時にフォームリクエストが1つしか指定出来ないと思っているので、リクエストには2つのフォームのバリデーションをまとめて書いています。
問題点
片方のフォームを送信する際に両方とものバリデーションが行われてしまう。
これを独立した2つのフォームとして機能させたいです。
進捗状況
こちらの記事を参考にフォームが複数(ボタンが複数)あった際の分岐処理の方法を参考にしました。
また、ボタンに値を付けて判断するのはこちらの記事を参照させて頂きました。
controller
1public function change(Request $request) 2 { 3//一つ目のフォームのボタンの値があったら 4 if (isset($request->btn_leader)) { 5 $this->leader($request); 6//二つ目のフォームのボタンの値があったら 7 } elseif (isset($request->btn_member)) { 8 $this->member($request->add_member); 9 } 10 } 11 12一つ目のフォームの処理 13public function leader(MyTeamMemberLeaderRequest $request) 14 { 15 //リーダー交代 16 $leader_id = $request->leader; 17 $leader = User::find($leader_id); 18 $leader->leader = 0; 19 $leader->save(); 20 $user = Auth::user(); 21 $user->leader = null; 22 $user->save(); 23 24 return redirect('/myteam'); 25 }
一つ目のフォームのボタンの値があった際に$this->leader();を呼び出す際に
leader
1public function leader(Request $request) 2 { 3 //リーダー交代 4 $leader_id = $request->leader; 5 $leader = User::find($leader_id); 6 $leader->leader = 0; 7 $leader->save(); 8 $user = Auth::user(); 9 $user->leader = null; 10 $user->save(); 11 12 return redirect('/myteam'); 13 }
このように引数にフォームリクエストを使用しないとエラーが出ませんが
leader
1public function leader(MyTeamMemberLeaderRequest $request) 2 { 3 //リーダー交代 4 $leader_id = $request->leader; 5 $leader = User::find($leader_id); 6 $leader->leader = 0; 7 $leader->save(); 8 $user = Auth::user(); 9 $user->leader = null; 10 $user->save(); 11 12 return redirect('/myteam'); 13 }
このようなエラーが発生してしまいます。フォームリクエストを使用した際にもしっかりメソッドを使用出来るようにしたいです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/20 01:59
2019/05/20 15:32
2019/05/22 14:01