Laravelではコマンド1つでユーザ認証に関連したプログラムファイルやDBを生成してくれるので、とても便利です。
今回はその機能をカスタマイズして、ユーザ情報を保存するusersテーブルのカラムを追加してみたいと思います。
usersテーブルにカラムを追加する
usersテーブルに、例えばカラム「電話番号」「住所」を追加します。
カラムを追加するために、以下のコマンドでマイグレーションファイルを作成します。
> php artisan make:migration add_column_to_users_table
ファイル「database/migrations/2020_xx_xx_xxxxxx_add_column_to_users_table.php」が生成されます。
以下のように、電話番号と住所を追加する処理を追記します。
public function up() { Schema::table('users', function (Blueprint $table) { $table->string('phone'); // 電話番号 $table->string('address'); // 住所 $table->softDeletes(); // ソフトデリート }); } public function down() { Schema::table('users', function (Blueprint $table) { $table->dropColumn('phone'); // 電話番号 $table->dropColumn('address'); // 住所 $table->dropSoftDeletes(); // ソフトデリート }); }
ファイルを保存したら、マイグレーションを実行します。
> php artisan migrate
DBのusersテーブルを確認すると、カラム「phone」と「address」が追加されてるのが確認できます。
モデルを編集する
Userモデル「app/User.php」を編集します。
protected $fillable = [ 'name', 'email', 'password', 'phone', 'address', ];
追加したカラム「phone」と「address」を追記します。
これでDB側の準備は完了です。
コントローラを編集する
次に、ユーザ新規登録時に追加したカラムのデータを取り込むために、コントローラ「app/Http/Controllers/Auth/RegisterController.php」を編集します。
以下、バリデーション情報です。必要に応じてバリデーションのオプションを調整します。
protected function validator(array $data) { return Validator::make($data, [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'], 'phone' => ['required', 'string', 'max:11'], // 電話番号 'address' => ['required', 'string', 'max:255'], // 住所 ]); }
以下、DBに値を登録する処理です。
protected function create(array $data) { return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), 'phone' => $data['phone'], 'address' => $data['address'], ]); }
ビューを編集する
ユーザ新規登録画面に電話番号と住所を入力するフォームを追加します。
ビュー「resources/views/auth/register.blade.php」を編集します。
<div class="form-group row"> <label for="phone" class="col-md-4 col-form-label text-md-right">電話番号</label> <div class="col-md-6"> <input id="phone" type="text" class="form-control{{ $errors->has('phone') ? ' is-invalid' : '' }}" name="phone" value="{{ old('phone') }}" required autofocus> @if ($errors->has('phone')) <span class="invalid-feedback"> <strong>{{ $errors->first('phone') }}</strong> </span> @endif </div> </div> <div class="form-group row"> <label for="address" class="col-md-4 col-form-label text-md-right">住所</label> <div class="col-md-6"> <input id="address" type="text" class="form-control{{ $errors->has('address') ? ' is-invalid' : '' }}" name="address" value="{{ old('address') }}" required autofocus> @if ($errors->has('address')) <span class="invalid-feedback"> <strong>{{ $errors->first('address') }}</strong> </span> @endif </div> </div>
基本的に、既存の「名前」を入力するエリアのタグをコピーして、電話番号と住所にカスタマイズ置き換えるだけで動作します。レイアウト調整やバリデーションの内容など、必要に応じて調整すればよいです。
最後に、実際にブラウザからユーザ新規登録画面にアクセスし、電話番号と住所を入力して登録します。
DBのusersテーブルに追加したカラムにデータが入力されていることを確認できるはずです。
コメントする