laravel/uiなどのライブラリを使用して認証機能を作成すると、一発で登録機能も自動で作成されて便利ですが、確認画面がありません。
調べた限り、デフォルトでは確認画面は用意されておらず、カスタマイズして作成する必要があるようです。(2022年9月時点.Laravel9)
なおここで紹介するやり方は、公式ドキュメントなどは参照せずソースを触りながら見つけたやり方ですが、ご了承ください。
※laravel/uiは導入されている前提で進めさせていただきます。
概要
データの受け渡しにはセッションを使用します。
修正するファイルは下記になります。
ビュー
・resources/views/auth/confirm.blade.php(新規)
・resources/views/auth/register.blade.php(修正)
コントローラ
・app/Http/Controllers/Auth/RegisterController.php(修正)
ルート
・routes/web.php(修正)
ビュー
resources/views/auth/confirm.blade.php(新規)
resources/views/auth/register.blade.phpをコピーしてresources/views/auth/confirm.blade.phpを作成して、formの遷移先とformタグの中を修正します。
<form method="POST" action="{{ url('register/complete') }}"> //修正
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<div class="row mb-3">
<label for="name" class="col-md-4 col-form-label text-md-end">{{ __('Name') }}</label>
<div class="col-md-6">
{{session()->get('name')}}
</div>
</div>
<div class="row mb-3">
<label for="email" class="col-md-4 col-form-label text-md-end">{{ __('Email Address') }}</label>
<div class="col-md-6">
{{session()->get('email')}}
</div>
</div>
<div class="row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Register') }}
</button>
</div>
</div>
resources/views/auth/register.blade.php(修正)
resources/views/auth/register.blade.phpのフォームの遷移先と、ボタンの名前を変更します。
<form method="POST" action="{{ url('register/confirm') }}"> //修正
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<button type="submit" class="btn btn-primary">
Confirm //修正
</button>
コントローラ
app/Http/Controllers/Auth/RegisterController.phpに下記を追記します。
一つ目と二つ目はバリデーション時と登録実行時に、セッションデータを渡すようにしています。
三つめは確認用のメソッドです。バリデーション実行後、リクエストデータをセッションに入れ、確認画面を読み込んでいます。
protected function validator(array $data)
{
$data = session()->all(); //追記
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
protected function create(array $data)
{
$data = session()->all(); //追記
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
public function confirm() //追記
{ //追記
$request = request(); //追記
$request->validate([ //追記
'name' => ['required', 'string', 'max:255'], //追記
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], //追記
'password' => ['required', 'string', 'min:8', 'confirmed'], //追記
]); //追記
foreach($request->all() as $key => $val){ //追記
$request->session()->put($key, $request->$key); //追記
} //追記
return view('auth.confirm'); //追記
} //追記
ルーティング
routes/web.phpに下記3行を追記します。
Route::redirect('/register/confirm', '/register'); //追記
Route::post('/register/confirm', [App\Http\Controllers\Auth\RegisterController::class,'confirm']); //追記
Route::post('/register/complete', [App\Http\Controllers\Auth\RegisterController::class,'register']); //追記
以上になります!
コメント