Laravel 8でログイン機能実装3 会員登録項目追加
Laravelのパッケージとして利用できるログイン機能のカスタマイズシリーズ第三弾として
会員登録時の入力項目をカスタマイズします。
例えばECサイトで住所を入力してもらったり、マッチングサイトで性別を入力してもらうなど
項目追加したいケースは多数ありますね。
対応概要
修正する箇所は下記
- 会員登録画面の修正
- エラーメッセージ修正
- バリデーション設定
- データ登録
- DBマイグレーション
Laravel会員登録画面の修正
今回追加する項目はこちらの6項目
追加項目一覧
項目名 | 物理名 |
---|---|
郵便番号 | zip-code |
都道府県 | prefecture |
市町村 | city |
住所1 | address1 |
住所2 | address2 |
電話番号 | tel |
これをまずは会員登録画面に項目作成します。
郵便番号のサンプルのみ記載しますが、これを6項目分作成します。
<div class="form-group row"> <label for="zip-code" class="col-md-4 col-form-label text-md-right">{{ __('zip-code') }}</label> <div class="col-md-6"> <input id="zip-code" type="number" class="form-control @error('zip-code') is-invalid @enderror" name="zip-code" value="{{ old('zip-code') }}" required autocomplete="zip-code"> @error('zip-code') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div>
フォームのタイプは項目に応じて修正する必要はあります。
サンプルは郵便番号なので、「数字」項目としております。
エラーメッセージ
次に会員登録時などのエラーメッセージを登録します。
今回登録した項目の物理名に対して、フロントに表示する文言を設定します。
"zip-code": "郵便番号", "prefecture": "都道府県", "city": "市町村", "address1": "番地", "address2": "マンション", "tel": "電話番号",
バリデーション
バリデーションのロジックは「RegisterController」に記載があります。
本当は独立させた方がいいのですが、とりあえず今回はそのまま。
protected function validator(array $data) { return Validator::make($data, [ 'login_id' => ['required', new alpha_num_check(), 'max:20','unique:users'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'], //ここから会員登録項目追加 'zip-code' => ['required', 'string', 'max:7'], 'prefecture' => ['required', 'string', 'max:5'], 'city' => ['required', 'string', 'max:20'], 'address1' => ['required', 'string', 'max:20'], 'address2' => ['required', 'string', 'max:20'], 'tel' => ['required', 'string', 'max:9'], ]); }
このままでは、バリデーション時の項目名が英語のまま表示されてしまいますので
バリデーションのattributeも設定する必要があります。
設定箇所はこちらです。
'attributes' =>gt; [ 'email' => 'メールアドレス', 'password' => 'パスワード', 'login_id' => 'ログインID', 'zip-code' => '郵便番号', 'prefecture' => '都道府県', 'address1' => '住所1', 'address2' => '住所2', 'tel' => '電話番号', ],
データベースへの登録
もともと準備されている登録ロジックを拡張する形で、今回追加した項目も追加します
protected function create(array $data) { return User::create([ 'login_id' => $data['login_id'], 'email' => $data['email'], 'password' => Hash::make($data['password']), //ここから会員登録項目追加 'zip-code' => $data['zip-code'], 'prefecture' => $data['prefecture'], 'city' => $data['city'], 'address1' => $data['address1'], 'address2' => $data['address2'], 'tel' => $data['tel'], ]); }
これで登録機能の追加も完了です。簡単ですね。
DBマイグレーション
最後に、追加した情報を登録するテーブルを準備します。
laravelのマイグレーション機能を使って、項目追加をします。
public function up() { Schema::table('users', function (Blueprint $table) { $table->string('tel',9)->after('remember_token')->comment('電話番号'); $table->string('address2',50)->after('remember_token')->comment('マンション'); $table->string('address1',50)->after('remember_token')->comment('番地'); $table->string('city',50)->after('remember_token')->comment('市町村'); $table->string('prefecture',10)->after('remember_token')->comment('都道府県'); $table->string('zip-code',7)->after('remember_token')->comment('郵便番号'); }); }
これで会員登録目の追加機能が完了です。
Laravelログイン機能連載一覧
- Laravel 8でログイン機能実装1 基本機能
- Laravel 8でログイン機能実装2 ログインIDの導入
- Laravel 8でログイン機能実装3 会員登録時の入力項目追加 ←いまここ
- Laravel 8でログイン機能実装4 ValueObjectとバリデーション
- Laravel 8でログイン機能実装5 会員情報変更
学習中ですが、既存のものに手を加えるとなるとわからな過ぎて途方に暮れておりました。。
細かい手順まで記載されていてわかりやすいです。感謝いたします。
コメントありがとうございます。
お褒めの言葉を頂き恐縮です。