search
LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

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

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

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

ルーティング↓

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

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
What you can do with signing up
0