问题
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