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.phpAuth::routes();文よりも前で定義してください。

ルートの定義は先に定義したものが優先されます。

もう一回書いておきますが、検索だけでなく、コードリーディングもしましょう。