Adding member to a group when registering them?

不羁的心 提交于 2019-12-11 10:47:27

问题


I have a registration form that allows a user to register. When they register I want to add them to a group automatically. I have tried using the $member->AddToGroupByCode('Administrators') method but this doesn't add any groups to the member.

What am I doing wrong?

RegisterForm.php

<?php

class RegisterForm extends Form {
    public function __construct($controller, $name) {
        $fields = new FieldList(
            TextField::create('FirstName'),
            TextField::create('Surname'),
            TextField::create('Email'),
            PasswordField::create('Password'),
            PasswordField::create('ConfirmPassword'),
            TextField::create('Username')

        );

        $actions = new FieldList(
            new FormAction('doRegister', 'Register')
        );

        $validator = new RequiredFields(
          'Email', 'Password', 'ConfirmPassword', 'Username'
        );

        parent::__construct($controller, $name, $fields, $actions, $validator);

        $this->disableSecurityToken();
    }

    public function doRegister($data, $form) {
        $member = new Member();
        $form->saveInto($member);
        $password = $data['Password'];
        $member->changePassword($password);
        $member->addToGroupByCode('Administrators') // Or could be another group I setup e.g 'Students' etc;
        $member->write();

        return $this->controller->redirect($this->controller->Link('thanks'));
    }
}

回答1:


Very simple. Just add this under your $member->write();

$member->Groups()->add($group);

And put above your $member->new Member();

$group = Group::get()->filter('Title','Client')->first();

Or

$group = Group::get()->filter('ID','SomeID')->first();

The $group is the target group that you want. You can filter it or get it by id.




回答2:


Member::addToGroupByCode($code, $title = "") uses internal Group code. When you create new group, the code is generated as lowercase title, but later the title can be changed. The only reliable way to get existing group codes are from the database.

SELECT Code, Title FROM `Group`;

If you called $member->addToGroupByCode('administrators', 'Administrators'); this would have created a new group with code 'administrators' if missing.

So the final code might be:

public function doRegister($data, $form) {
    $member = Member::get()->filter('Email', $data['Email'])->first();
    if ($member) {
        return $this->memberAlreadyExists();
    }

    $member = new Member();
    $member->update($data);
    $member->write();
    $member->addToGroupByCode('administrators', 'Administrators');

    return $this->controller->redirect($this->controller->Link('thanks'));
}


来源:https://stackoverflow.com/questions/36214098/adding-member-to-a-group-when-registering-them

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!