#ルーティングでハマったこと
アカウント編集で「名前」、「パスワード」、「メールアドレス」を編集する機能をつけたときの話。
##ルーティング↓
routes/web.php
//名前、パスワードを編集する
Route::get('user/{page}', 'UserController@showEditForm')->name('user.edit');
//メールアドレスは、確認メールを送ったりトークンを発行したりと性質が違うと思ったので別にコントローラを用意。
Route::get('user/email', 'EmailResetController@showEditForm')->name('email.edit');
##コントローラー↓
UserController.php
public function showEditForm(Request $request)
{
$login_user = Auth::user();
return view('user.email', compact('login_user'));
}
EmailResetController.php
public function showEditForm(Request $request)
{
$login_user = Auth::user();
return view('user.email', compact('login_user'));
}
あれ、
user/emailにアクセスしたのに、EmailResetControllerが呼ばれない。
#原因
優先度が関係。
上に書かれた記述の方が優先度が高い。そのため、上に書くか、whereメソッドで、ルートパラメータを制約する。
routes/web.php
//名前、パスワードを編集する
Route::get('user/{page}', 'UserController@showEditForm')->name('user.edit')->where('page', 'name|password');
//メールアドレスは、確認メールを送ったりトークンを発行したりと性質が違うと思ったので別にコントローラを用意。
Route::get('user/email', 'EmailResetController@showEditForm')->name('email.edit');