Laravel:ユーザー登録時にroleも一緒にcreateする方法

Laravel:ユーザー登録時にroleも一緒にcreateする方法

管理者による新規ユーザー作成関連として、前回までの記事で下記構成を構築しました。

この状態でユーザーの登録項目を変更しようとしたところ、新設した項目(role等)が初期値で入ってしまいました。
以前カスタマイズした場所なのですが、すっかり忘れていたので備忘録に残します。

項目追加時は2個所の変更が必要です

  1. \app\Http\Controllers\RegisterController.php
  2. \app\User.php

ControllerとModelです。
よく考えれば当たり前なのですが、私はUser.phpの変更をすっかり忘れてしまいました。

そのため、roleの値が初期値で登録されるという現象が発生していました。

RegisterController.phpに追記

    /**
     * Get a validator for an incoming registration request.
     * 着信登録要求のバリデータを取得します。
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    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:6|confirmed',
            'role' => 'required|Integer|max:2', //追加ヶ所
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     * 有効な登録後に新しいユーザーインスタンスを作成します。
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'role' => $data['role'], //追加ヶ所
        ]);
    }

バリデータとクリエイトに新規追加時に登録したい値を記載します。

User.phpに追記

    protected $fillable = [
        'name',
        'email',
        'password',
        'role',      //追加ヶ所
    ];

$fillable の中に新規追加時に登録したい値を記載します。

まとめ

この2つのファイルを変更すれば良いだけなので、例えば『苗字と名前を分ける』『ログインIDを新設する』なんて時も簡単に対応できます。

 

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください