前提・実現したいこと
laravel8で開発しています。
1つの画面に複数のformがあります。
formごとに別のcontrollerで処理をして
同じ画面を再表示したいです。
通信は全てpostで行いたいです。
試したこと
formの遷移先はweb.phpで行うのかと思いましたが
web.php
1Route::get('/index', [App\Http\Controllers\HomeController::class, 'index'])->name('index'); 2Route::post('/index', [App\Http\Controllers\UsersController::class, 'update'])->name('profile')->middleware('verified'); 3Route::post('/index', [App\Http\Controllers\BanksController::class, 'update'])->name('bank.update')->middleware('verified'); 4
のように同じpostで第一引数に同じ値を入れるとエラーになります。
(これがどうしてできないのかは理解しています。)
web.phpではなくリダイレクトを使うのか?と考え、
Controller
1class BanksController extends Controller 2{ 3 public function update(Request $request) 4 { 5 return redirect()->route('index'); 6 } 7}
とするのかと思ったのですが、
formからControllerのfunctionを指定してsubmitする方法がわかりませんでした。
解決方法
教えていただいた回答からこのように作ったという解決ソースを記載しておきます。
web.php
1Route::get('/index', [App\Http\Controllers\HomeController::class, 'index'])->name('index'); 2Route::post('/user/update', [App\Http\Controllers\UsersController::class, 'update'])->name('profile')->middleware('verified'); 3Route::post('/bank/update', [App\Http\Controllers\BanksController::class, 'update'])->name('bank.update')->middleware('verified'); 4 5//おまけ:各formのidを指定して、各formが表示されるように追加 6Route::get('/index#profile', [App\Http\Controllers\HomeController::class, 'index'])->name('index.profile'); 7Route::get('/index#bank', [App\Http\Controllers\HomeController::class, 'index'])->name('index.bank'); 8
※ポイント
/user/update
/bank/update
の部分は何でもいい。仮に名前をつけただけ。
UsersController
1class UsersController extends Controller 2{ 3 public function update(Request $request) 4 { 5 return redirect()->route('index.profile'); 6 } 7}
BanksController
1class BanksController extends Controller 2{ 3 public function update(Request $request) 4 { 5 return redirect()->route('index.bank'); 6 } 7}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/02 02:00