前提・実現したいこと
Laravel で日本語と英語に対応したサイトを作成しており、
Laravel の認証機能を使ってユーザー登録のページを作成しています。
なのでトップページや規約、ログイン画面やユーザー登録のページ全てに日本語と英語のページが存在します。
【日本語】
- /jp (日本語トップページ)
- /jp/register (日本語ユーザー登録画面)
- /jp/login(日本語ログイン画面)
- など…
【英語】
- /en (英語トップページ)
- /en/register (英語ユーザー登録画面)
- /en/login (英語ログイン画面)
- など…
発生している問題・エラーメッセージ
日本語パターン
- 日本語のトップページ [ /jp ]
- 日本語のユーザー登録ページ [ /jp/register ]
- 登録完了後、日本語のトップページにリダイレクト [ /jp ]
英語パターン
- 英語のトップページ [ /en ]
- 英語のユーザー登録ページ [ /en/register ]
- 登録完了後、英語のトップページにリダイレクト [ /en/register ]
という2パターンが想定されますが、こういった処理の作成が実装できません。
Laravel標準のAuth機能を確認したところ、
app/Providers/RouteServiceProvider.php
の
public const HOME = ‘/’
の値にリダイレクトされるようでした。
ここを、日本語ページ(jp/register)から登録した場合は /jp に、英語ページ(en/register)から登録した場合は /enに
したいと思いますが、そういった方法はあるでしょうか。
試したこと
Auth/RegisterController.php
を確認したところ
protected $redirectTo = RouteServiceProvider::HOME;
こちらのプロパティが上記のリダイレクト先になっているようなのですが、LoginController.phpがあることを考えると、RouteServiceProvider.phpを修正した方が良いかと考えています。
URLの jp と en は
php
1//routes.php 2Route::pattern('lang', 'jp|en'); 3Route::group(['prefix' => '{lang?}'], function(){ 4 Route::get('/','MainController@jpIndex')->name('jpIndex'); 5 Route::get('register','Auth\RegisterController@showRegistrationForm')->name('register'); 6 Route::post('register', 'Auth\RegisterController@register'); 7});
のようにルートパラメータにしているので、これを RouteServiceProvider.php で取得できればと思ったのですが、そういった方法は見つかっていないという状況です。
ログイン状態の際のリダイレクトは
php
1//RedirectIfAuthenticated.php 2 public function handle($request, Closure $next, $guard = null) 3 { 4 if (Auth::guard($guard)->check()) { 5 return redirect('/'.$request->route('lang')); 6 } 7 8 return $next($request); 9 }
こちらのように設定できたので、ユーザー登録やログイン画面もこのようにできればと考えております。
RouteServiceProvider.php にも同じようなコードを書いてみたのですが、$requestの値を呼び出すことができません。
至らぬ点もあるかとは思いますが、よろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
Laravelのバージョンは7を使用しています。
あなたの回答
tips
プレビュー