LoginSignup
0
0

More than 3 years have passed since last update.

ルーティングルートパラメータの正規表現

Last updated at Posted at 2020-09-15

ルーティングでハマったこと

アカウント編集で「名前」、「パスワード」、「メールアドレス」を編集する機能をつけたときの話。

ルーティング↓

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');

https://readouble.com/laravel/5.5/ja/routing.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0