Добавление участника в группу при их регистрации?
У меня есть форма регистрации, которая позволяет пользователю зарегистрироваться. Когда они регистрируются, я хочу добавить их в группу автоматически. Я пытался использовать $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();