Laravel adminでユーザーのパスワードを管理する

Laravelロゴ

Laravel Adminを使ってユーザーの情報を管理したい場合があると思います。
ただ、FormやModelが通常とは違いAdminで独自なので、前処理、後処理をどうやってけけばいいのか悩みますね。
結論から言うとこんな感じにすると良いかと思います。


    protected function form()
    {
        $form = new Form(new User());

        $form->text('name', __('Name'));
        $form->email('email', __('Email'));        
        $form->password('password', __('Password'));
        $form->saving(function (Form $form) {
            if ($form->password) {  // パスワードをハッシュ化
                $form->password = bcrypt($form->password);
            }else{ // パスワード欄が空欄なら変更しない
                $form->password = $form->model()->password;
            }
        });

        return $form;
    }

ここで問題になるのが、パスワードの扱いですね。
パスワードをどうやってハッシュ化して保存するか?
パスワードを変更したない場合はどうするか?
という2点。
まず、フォームから入力されたものや保存したい内容は$form->{カラム名}で入ってきますので、
$form->password = bcrypt($form->password);
でハッシュ化できます。
次に空欄の場合変更せずに保存したいというところは、保存前のデータが$form->model()->{カラム名}でアクセスできますので、これを使うと良いでしょう。

タイトルとURLをコピーしました