Laravel5.4、ルートページでログイン/ユーザ登録したい場合
タグ: Laravel5.3 Laravel5.4
ドメインアクセス時に表示される、最初のページはルートページと呼ばれます。トップページとも呼ばれます。ドメインがsample.comであれば、http(s)://sample.comがURL、URIは/になります。
先ずユーザ登録してもらいたいサイトであれば、そのルートページに登録フォームを表示することができます。また、ログインしてもらわなければ何もユーザに見せない、やらせないサイトを構築するのであれば、ログインフォームを表示するのが便利です。
こうした処理にJavaScriptなどを使わずに、通常のサイトとしてLaravelで実装するときのヒントです。コードを読むと、こうしたことも簡単に実現できます。面倒で行っていない方は、ぜひ試してください。
なお、今回の内容はLaravel5.3でも利用できるはずです。
生成されるファイルを全て使用するわけでありませんが、Laravel標準の認証スカフォールドにより、必要なリソースを生成し、ルートを定義しましょう。手間はできるだけ省きましょう。
php artisan make:auth php artisan migrate
ルートページでログイン
ルートで表示するページにログインフォームを埋め込んでください。フォームの送信先URIは、Laravelの認証で標準的に使用される、/loginにします。
<form method="POST" action="{{ url('/login') }}">
/routes/web.phpファイルに挿入されているAuth::routes();の呼び出しにより定義されるルートにより、POSTメソッドの/loginURIは、App/Http/Controllers/Auth/LoginControllerクラスのshowLoginFormメソッドを呼び出します。php artisan route:listコマンドで、定義済みのルート一覧を参照できます。活用しましょう。
showLoginFormをオーバーライドして、ルートページを表示するようにします。これを変更しないと、バリデーションエラー時に動作がおかしくなります。
public function showLoginForm()
{
return redirect('/');
}
これだけです。実はログインは試していません。上手く動作しなければ、コード読んで修正してください。 :P
ルートページでユーザー登録
ログインと方法論は同じです。まず、ルートページにユーザー登録フォームを埋め込みます。POST先を変更しておきましょう。
<form method="POST" action="{{ url('/register') }}">
/registerのURIもLaravel標準のもので、Auth::routesメソッドで定義されます。このPOSTルートは、App/Http/Controllers/Auth/RegisterControllerクラスのshowRegistrationFormメソッドを呼び出します。このクラスをオーバーライドして、ルートURIへリダイレクトさせます。
public function showRegistrationForm()
{
return redirect('/');
}
こちらのユーザー登録パターンは、実際に試しています。まあ、動作するでしょう。
最後に
フォームの送信先をLaravel標準ではなく、自分で定義してもかまいません。その場合は、web.phpのAuth::routes();文よりも前で定義してください。
ルートの定義は先に定義したものが優先されます。
もう一回書いておきますが、検索だけでなく、コードリーディングもしましょう。