Добавление участника в группу при их регистрации?

У меня есть форма регистрации, которая позволяет пользователю зарегистрироваться. Когда они регистрируются, я хочу добавить их в группу автоматически. Я пытался использовать $member->AddToGroupByCode('Administrators') метод, но это не добавляет никаких групп к члену.

Что я делаю неправильно?

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'));
    }
}

2 ответа

Очень просто. Просто добавьте это под вашим $member->write();

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

И поставьте над своим $member->new Member();

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

Или же

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

$ Group - это целевая группа, которую вы хотите. Вы можете отфильтровать его или получить по идентификатору.

Member::addToGroupByCode($code, $title = "") использует внутренний код группы. Когда вы создаете новую группу, код генерируется как строчный заголовок, но позже заголовок можно изменить. Единственный надежный способ получить существующие групповые коды - из базы данных.

SELECT Code, Title FROM `Group`;

Если вы позвонили $member->addToGroupByCode('administrators', 'Administrators');это создало бы новую группу с кодом "администраторы" в случае отсутствия.

Таким образом, окончательный код может быть:

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'));
}

Просто , вы должны сохранить детали перед добавлением в группу. просто поместите

$member->addToGroupByCode('administrators', 'Administrators');

перед

$member->write(); 
Другие вопросы по тегам