Laravel5.4、ルートページでログイン/ユーザ登録したい場合
Tags : 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メソッドの/login
URIは、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();
文よりも前で定義してください。
ルートの定義は先に定義したものが優先されます。
もう一回書いておきますが、検索だけでなく、コードリーディングもしましょう。