Laravel 6でログイン機能実装3 会員登録項目追加

Laravelのパッケージとして利用できるログイン機能のカスタマイズシリーズ第三弾として

会員登録時の入力項目をカスタマイズします。

例えばECサイトで住所を入力してもらったり、マッチングサイトで性別を入力してもらうなど

項目追加したいケースは多数ありますね。

対応概要

修正する箇所は下記

  • 会員登録画面の修正
  • エラーメッセージ修正
  • バリデーション設定
  • データ登録
  • DBマイグレーション

会員登録画面の修正

今回追加する項目はこちらの6項目

追加項目一覧

項目名物理名
郵便番号zip-code
都道府県prefecture
市町村city
住所1address1
住所2address2
電話番号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('郵便番号');
    });
}

これで会員登録目の追加機能が完了です。

ログイン機能連載一覧

コメントを残す